Храните его, используя 4 дерева и массив.
4 дерева должны учитывать только индексы. Вам не нужно хранить всю каждую строку в дереве, достаточно только строки, чтобы отличить ее от остальных строк (т.е. хранить символы в узлах, и вы получите лист, когда у вас будет достаточно префикса определить строку (ы)). Вы можете быть немного умнее, аннотируя свое дерево узлами «пропустить n букв», чтобы не хранить внутренние узлы, когда все строки в этом поддереве равны следующим n буквам.
Затем архивист сохраняет записи.
На листьях деревьев вы просто храните указатель в массиве.
Если вы делаете это правильно, вы используете 350 000 * 2 * 4 (байты для целого числа) + X ~ = 3 МБ + X, где X - размер вашего файла, конечно, ваша система имеет столько же? Вы даже можете оставить данные в файле и индексировать в файл.