Вы не указали яп. В C# это решается одной строкой кода
File.ReadLines(pathToTextFile)
.SkipWhile(line => !line.Contains("word")) // пропустит строки по условию
.Skip(count) // сколько строк пропустить надо
.TakeWhile(line => line.Contains("word")) // берет строки по условию
.Take(count) // сколько строк взять надо
А так, не зная длины строк, как Вы будете смещение делать? Поэтому, кроме предложенного Вами варианта, вариантов и нет) Всякие метки, хеши и индексы я не учитываю, Вы же не хотите размер файла увеличивать.