Ovo sa dynamic stringovima u klauzulama definitivno ubija svaku poentu LINQa i vraca nas na staro vreme SqlReadera i string dependency-a, kad su programi pucali u runtime-u zbog jednog slova.
Svaki element EF.NET (ili Linq2SQL) LINQ-a je neki od ExpressionTree elemenata koji moze da se "ubrizga" u odgovarajucu LINQ konstrukciju i to je pristup koji treba koristiti. Npr (za C#) smo skoro resavali slican problem:
http://www.elitesecurity.org/p3523790
Nisam toliko verziran u VB.NETu ali sigurno postoji slicno resenje koje ce i dalje ostati strong typed naspram modela.
Btw, ta gomila If-ova u WHERE ne izgleda nimalo zdravo

Linq od toga napravi jedan ogroman ExpressionTree od kojeg napravi jos grozomorniji SQL upit sa brdom CASE/WHEN/END provera

IMHO, bar zakljucno sa EF.NET 5, parser ne radi client-side boolean optimizaciju, sto ce reci svi tvoji filteri idu na SQL server i evaluiraju se na SQL serveru za sve redove. Probaj da primenis metod sa linka koji sam ti dao, dakle za svaki od filtera napravi Expression<Func<TOBJ, bool>> i naredjajih redom u Where lancu (sekvencijalni Where uslovi su isto sto i pojedinacni uslovi povezani AND operator). Tako ces na server slati samo uslove koji ti zaista trebaju.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić