<cfquery name="abfrage" datasource="kundendata" password="root" username="root">
select *
from kunden
where 0=0
<cfif #name# is NOT "">
AND name LIKE '%#name#%'
</cfif>
<cfif #vorname# is NOT "">
AND vorname LIKE '%#vorname#%'
</cfif>
<cfif #adresse# is NOT "">
AND adresse LIKE '%#adresse#%'
</cfif>
<cfif #email# is NOT "">
AND email LIKE '%#email#%'
</cfif>
<cfif #tel# is NOT "">
AND tel LIKE '%#tel#%'
</cfif>
<cfif #faxnr# is NOT "">
AND faxnr LIKE '%#faxnr#%'
</cfif>
<cfif #datum# is NOT "">
AND datum LIKE '%#datum#%'
</cfif>
<cfif #ort# is NOT "">
AND ort LIKE '%#ort#%'
</cfif>
<cfif #plz# is NOT "">
AND plz LIKE '%#plz#%'
</cfif>
<cfif #firma# is NOT "">
AND firma LIKE '%#firma#%'
</cfif>
<cfif #kunde_id# is NOT "">
AND kunde_id LIKE '%#kunde_id#%'
</cfif>
</cfquery>
Die ganzen Abfragen kannst Du Dir schenken, wenn Du in der Datenbank auch Nullwerte zulässt (z.B. in Access beim entsprechenden Feld "Leere Zeichenfolge" auf JA setzen).
Datasource würde ich in application.cfm "auslagern" (dort die Variable dafür definieren) und fortan über diese Variable referenzieren (z.B. datasource="#DSN#"). Damit brauchst Du bei Änderungen dann nur die Variablendefinition in der application.cfm ändern und nicht in jedem Script alle Bezüge. Für Hilfe zum application-Framework s. CF Manual.
Noch ein Tipp: Wenn Du nicht absolut sicher bist, dass PLZ eine Zahl sein wird (z.B. problematisch bei nicht-dt. PLZ) dann besser als Text behandeln.
Die Abfrage lautet dann z.B.:
<CFQUERY NAME="Search" datasource="#DSN#">
SELECT *
FROM kunden
WHERE firma LIKE '%suchbegriff%'
OR name LIKE '%suchbegriff%'
etc.
etc.
</CFQUERY>