Классикой поиска в больших файлах является Sphinx, однако у вас не набор букв, а структурированные данные, по этому я думаю вам будет логичней создать параметризованную модель и перенести все в бд, хотя бы в SQLite (вроде у вас достаточно простая модель данных). Но тут тоже есть нюансы, ну и возможно это вам просто не подходит по ряду причин. Тогда сфинкс для вас лучший вариант, хотя 50 мб файл как-то мелковато, обычно сфинкс ставят для работы с гигабайтными файлами, но будет "на вырост".