Как насчет этого:
Концепция: поскольку вы в основном читаете только один файл, индексируйте .7z по блокам.
читать сжатый файл блок за блоком, давать каждому блоку номер и, возможно, смещение в большом файле. сканировать привязки целевых элементов в потоке данных (например, заголовки статей в Википедии). Для каждой записи привязки сохраните номер блока, с которого начался элемент (который раньше был в блоке)
записать индекс в какое-то хранилище O (log n). Для доступа извлеките номер блока и его смещение, извлеките блок и найдите элемент. стоимость связана с извлечением одного блока (или очень немногих) и поиском строки в этом блоке.
для этого вам нужно прочитать файл один раз, но вы можете потоковое воспроизведение и сбросить его после обработки, чтобы ничто не попало на диск.
ЧЕРН: Вы в основном постулировали это в своем вопросе ... кажется, что лучше прочитать вопрос, прежде чем ответить ...