Ну, я подумал, что вы можете поместить условия фильтра в общий список предикатов:
var list = new List<string> { "me", "you", "meyou", "mow" };
var predicates = new List<Predicate<string>>();
predicates.Add(i => i.Contains("me"));
predicates.Add(i => i.EndsWith("w"));
var results = new List<string>();
foreach (var p in predicates)
results.AddRange(from i in list where p.Invoke(i) select i);
В результате получается список, содержащий «me», «meyou» и «mow».
Вы могли бы оптимизировать это, выполняя foreach с предикатами в совершенно другой функции, которая OR для всех предикатов.