Я думаю, что большинство из приведенных выше ответов просто предоставляют альтернативные способы сделать именно то, что вы пытаетесь избежать. Учитывая структуру данных, независимо от того, какую реализацию вы выберете, вам / ей придется сравнивать каждый элемент и выбирать те, которые соответствуют.
В зависимости от ваших критериев соответствия, SortedList может помочь вам избежать поиска по всему списку для каждого запроса. Если ваш список содержит объекты, которые вы создали, переопределение GetHashCode и Equals поможет вам.
Если подходящие критерии достаточно сложны, вам может понадобиться другая структура данных, например trie для строк.