Si la velocidad es un factor crítico, te puedo sugerir que utilices mapeo en memoria.
Tienes mmap para linux:
http://linux.die.net/man/2/mmapY en windows el equivalente, si no me equivoco es CreateFileMapping:
http://msdn.microsoft.com/en-us/library/aa366537(v=VS.85).aspx
Únicamente puedo hablar del mmap de linux, que es el que he usado, y para ficheros grandes, se suele experimentar una ganancia en la lectura. Ya que en vez de ir leyendo el fichero a bloques lo transportas a memoria de una, y luego lo recorres como si se tratase de una CADENA. No es algo que aconseje a alguien que está empezando.
Recalco lo de tratarlo como una cadena, porque eso te permite acceder al elemento que quieras, cuando quieras, Por tanto, si tu buscas un patrón en un texto (suponiendo que buscas un único patrón), después de mapear el fichero, se me ocurre que puedas recorrerlo del tirón buscando la primera letra de tu patrón, que la encuentras, compruebas si después está la segunda, que no? sigues.
Respecto a la velocidad... el uso que yo le he llegado a dar es leer 92 archivos de entre 1.5 y 2 MB cada uno, y pasar su contenido a una matriz (leía como texto, y luego pasaba a número, y no lo podía mapear directamente como números por tratarse de un fichero de texto, no binario)
189 MB en 2 segundos con mi portátil (pentium T4300)