Wenn jeder seinen Senf dazugeben kann ... schlage ich noch eine Lösung mit statischem SQL vor (ebenfalls in hunderten Programmen eingesetzt)

Code:
Select ...
  from ...
  Where     Column1 = Case When :Host1 > '' Then :Host1 Else Column1 End
        and Column2 = Case When :Host2 <> 0 Then :Host1 Else Column2 End
        and Column3 = Case When :Host3 < '2000-01-01' Then :Host3 Else Column3 End
        ... and so on
  ...
... und der Optimizer kann durchaus Indices verwenden (auch zusammengesetzte Indices) und je nach Auswahl sogar unterschiedliche Indices (und manchmal sogar mehrere Indices gleichzeitig - Index Merge!)