65 мг данных - это много, что нужно хранить в памяти, как бы вы на это ни смотрели.
Это означает, что на пути могут возникнуть и другие проблемы.
Работайте над ними, когда найдете их.
Пока вам нужно что-то, что может сработать.
В этом примере используется список для представления строки в строке.
Каждая строка является списком, который расположен горизонтально.
Данные для каждого просмотра списка состоят из строк, разделенных с помощью регулярных выражений.
Один без совпадения, до трех, если в строке найдено одно совпадение.
Для каждого чанка имеется модель представления (RunHI), у которой есть свойство IsMatch.
Если это правда, фон устанавливает желтый цвет с помощью источника данных.
https://gallery.technet.microsoft.com/WPF-Highlight-Matching-71ad5a04
Пример работает с фиксированным списком строк, но вы можете прочитать все строки https://docs.microsoft.com/en-us/dotnet/api/system.io.file.readalllines?view=netframework-4.8 в массив и прочитать их.