Тебе может не понадобиться что-то слишком причудливое. Ваш список «должен иметь» можно встретить с помощью простого механизма базы данных (например, BerkeleyDB или ESENT). Поместите все слова в таблицу, а затем используйте поиск для поиска слов.
B-дерево со страницами размером 8 КБ должно получить не менее 250 строк / страницу, что приведет к 1-му листу страниц, при этом B-дерево будет иметь высоту 3. Даже с диском ноутбука со скоростью вращения 5400 об / мин задержка ввода-вывода меньше чем 15 мс, так что в худшем случае вы сможете получить результаты через ~ 50 мс в худшем случае (полностью не кэшированные данные и медленный диск).
(Я создал приложение typeahead, которое использует класс PersistentDictionary на основе ESENT. С записями по 200 КБ я получаю ответ ~ 35 мс для первого поиска, когда данные вообще не кэшируются. После выполнения множества запросов ответ время падает до ~ 5 мс).
Для поддержки большого количества одновременно работающих пользователей вы можете добавить больше кеша или более быстрых дисков. Полное кеширование всех данных, вероятно, возможно (8 ГБ ОЗУ вполне доступны в наши дни), и данные о типе заголовка, безусловно, будут достаточно маленькими, чтобы поместиться на SSD, что обеспечит смешное количество операций ввода-вывода в секунду. Я мог бы пойти на SSD, потому что это даст большую производительность, даже когда кэш холодный (например, после перезапуска).
Решение на основе движка базы данных должно быть чрезвычайно быстрым.