****Mirá se me ocurre algo, si vos procesas archivos planos de texto quizás deberías tener un gran buffer de lectura, es decir, que cuando vaya a leer del archivo se traiga la mayor cantidad de cosas posibles. Igual es algo teórico lo que te digo.
Pero por ejemplo, la idea del Hash, es disminuir los accesos a disco, porque son costosos...
****También Fijate si estás usando recursión, la recursión quita performance a cambio de claridad de código.
****Pero también hay otra cosa que es trágicamente letal, cuando es proceso en lotes, tiene que tardar, así q como dice el amigo, mandá threads y esas cosas para que parezca amena la cosa.
**** Otra cosa más que se me viene a la mente, aunque no sé qué estás validando, es usar un algoritmo eficiente a la hora de analizar el texto, qué descarte cuando las cosas ya no sirven, que valide solamente cuando tenga que validar, etc, etc, etc.
****Espero no haberte mareado... y además de última si ya es un archivo muy grande, te recomendaría que uses bases de datos no???