ciao,

allora il trucco è nell' uso della funzione COALESCE

colaesce(x,y) restituisce il primo valore non nullo fra x e y

pertanto la query sara:
set @cognome = @cognome + '%'


where coalece(cognome,'') like @cognome
and coalesce(dataInizio,@dataInizio) >=dataInizio
and coalesce(dataFine,@dataFine) <=dataFine

sposto questo, è pericoloso passare al parmeter un campo di tipo testo,
ti conviene passare un oggetto DateTime, come dovrebbe essere.

Ciao!