Из структур данных попробуйте посмотреть вот это (если конечно вам нужен поиск подстроки, а не всей строки целиком):
https://ru.wikipedia.org/wiki/%D0%A1%D1%83%D1%84%D... , там есть ссылки на известные труды, что касается "не загружать оперативную память" - в общем-то для любой структуры данных можно организовать гибридное хранение - сам индекс построить заранее и хранить на диске (вполне логичный ход в случае предварительно подготовленного словаря), а в память загружать части индекса. Однако это значительно усложнит алгоритмы, нужно это вам или нет - зависит от деталей поставленной задачи (объем словаря, предельное время поиска и т.д.)