Je crains qu'il n'y pas grand chose à changer dans ta fonction de parsing. Utiliser les regex pour parser consommerait trop de ressources. Et sur 50.000 lignes...
Pistes:
Tester le privilège FILE, si oui -> LOAD DATA INFILE
Sinon, envisager de faire tourner l'injection en arrière plan (voir mon lien plus haut).
Dernière suggestion, pour un script qui prend autant de temps, envisager d'empêcher l'utilisateur d'arrêter le script en plein milieu sous peine d'avoir une table incomplète. Pour ça, vois du côté de http://www.php.net/manual/fr/function.i ... -abort.php