Я бы реализовал самоописываемый интерфейс ISearchable на ваших объектах модели данных.
Затем вы можете циклически перебирать каждый из элементов в списке и спрашивать базовый объект через интерфейс, соответствует ли онусловия поиска.
Другая возможность заключается в использовании отражения для получения значения из каждой записи с использованием свойства DisplayMember, но я лично предпочитаю интерфейсный подход, поскольку его можно использовать повторно в других ситуациях.