Se a tabela for muito grande, com milhões de registros por exemplo, a primeira consulta supostamente retorna toda a tabela, as demais executariam filtros no resultado da primeira consulta. É isso mesmo? Nesse caso, a consulta não seria ineficiente?
Eu não poderia combinar todos os filtros em apenas uma consulta utilizando o "ou"? O código abaixo poderia ser usado? E caso possa, seria mais eficiente?
var busca = from p in contexto.Produto where ((p.Nome == nome) || IsNullOrEmpth(nome)) && ((p.Preco > preco) || preco == 0) && ((p.Categoria.Nome == categoria) || IsNullOrEmpth(categoria)) select p