Da kommt schon einiges an Overhead zusammen.
Zunächst mal die Frage ob du bei Native-IO die Datei als Input oder Update definiert hast?
Beim Input wird geblockt gelesen und dann z.T. nur noch Zeiger versetzt.
Realer Vergleich geht nur mit ungeblocktem Lesen.
Hast du für Native-IO auch den Prozedur-Overhead programmiert?

Und dann schau dir mal die Listauflösung an.
Für SQL wird jede Variable 2 mal deklariert, 1 x SQL-XXX und dann eben Dein Feld.
Der Overhead liegt nun in den vielen Aufrufen und Übergaben und zusätzlichen Moves begründet.