Si tiene 1 millón de archivos para grep, (lo mejor que sé) revisará cada uno con una expresión regular.
Para todos los efectos, terminará haciendo lo mismo con las filas de la tabla si las consulta en masa utilizando un operador LIKE o una expresión regular.
Sin embargo, mi propia experiencia con grep es que rara vez busco algo que no contenga al menos una palabra completa, por lo que es posible que pueda aprovechar una base de datos para reducir el conjunto en el que está buscando.
MySQL tiene funciones nativas de búsqueda de texto completo, pero no las recomendaría porque significan que no está usando InnoDB.
Puede leer sobre los de Postgres aquí:
http://www.postgresql.org/docs/current/static/textsearch .html
Después de crear un índice en una columna tsvector, puede hacer su "grep" en dos pasos, uno para encontrar inmediatamente las filas que podrían calificar vagamente, seguido de otro en sus criterios verdaderos:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
Eso será significativamente más rápido que cualquier cosa que pueda hacer grep.