Sin demérito de lo ya expuesto, me permito una sosa observación.
Noto que declaras varios parámetros String sin usar
Const, y es probable que algunos de ellos no sean modificados dentro de la rutina, o pasados por referencia desde ahí. Seguramente ya lo sabías, pero no está de más recordar que eso le genera cierta carga adicional al programa, muy ligera, pero al fin instrucciones de más que pueden ser evitadas con solo declarar dichos parámetros como constantes. Básicamente, si no lo hacemos así, el compilador añade instrucciones máquina para incrementar los contadores de referencias de las cadenas de caracteres.
Veo incluso que la función
StringToComponentProc que tomaste de muestra, al igual que su original
StringToComponent que está en la ayuda de Delphi, también declara el parámetro
Value sin usar
Const, siendo que éste no es modificado ni pasado por referencia dentro de ella. Es algo muy raro de ver en otros métodos o rutinas de Borland / Embarcadero, como los que conforman la VCL, por ejemplo.
Saludos.