Это должен быть какой-то список, который вы можете поддерживать в отсортированном порядке. Вам также придется написать собственный алгоритм поиска, который даст вам индекс первого элемента в списке, который соответствует вашему шаблону поиска. Затем переходите от этого индекса к первому элементу, который не соответствует, и у вас будет список возможных завершений.
Я бы посмотрел на TreeList из общих коллекций. Он имеет быстрое время вставки и удаления из середины списка, которое вы хотите, чтобы поддерживать отсортированный порядок. Вероятно, было бы довольно легко написать свою функцию поиска из дерева, которое поддерживает этот список.