Я не знаю Javascript, но, если вы можете выполнять случайный поиск, вы можете выполнить бинарный поиск, выполнив поиск до средней точки вашего текущего блока (в байтах), а затем идти вперед до тех пор, пока вы не используете новую строку, до тех пор, пока вы «знаете», что ваш ключ против новой строки.
Однако будут случаи, когда вам нужно идти назад, поэтому вы можете выполнять поиск со знанием буферизации файлов, чтобы обратные шаги не были дорогими.
Полагаю, это может немного раздражать, если вы не имеете дело с файлами ASCII.