Boa noite.
Com Entity fica relativamente simples, já que tu queres fazer em uma query só:
var resultado = contexto.Tabela.Where(x =>
(String.IsNullOrEmpty(filtro1) || x.Campo1.Contains(filtro1))
&& (String.IsNullOrEmpty(filtro2) || x.Campo2.Contains(filtro2)));
// E por aí vai
Talvez, como alternativa, seja interessante criar vários métodos (para Filtro1, Filtro2, Filtro3), e ir complementando o Where (com IQueryable) de acordo com a necessidade; neste caso, tu só faria um if para cada item de filtro, não para cada combinação
possível.
Att., Rafael Simor