Ich denke du solltest mal ein konkretes Minimalbeispiel basteln wo wir sehen können welche Daten wie eingelesen werden und was danach mit ihnen gemacht wird.
Wenn es z.B. nur ums einlesen geht wäre ein String das schnellste.
Um darin aber Einträge zu suchen wären die anderen Datenstrukturen wiederrum besser.
Ideal wäre also mal ein kleines Minimalbeispiel was auf das wesentliche beschränkt ist und wo deine Grundprobleme vorkommen.
Übrigens: Dein Fazit das Sqlite bei 1e6 Einträgen langsamer ist als das Dictionary kann ich bei mir hier nicht reproduzieren.
Bei mir ist die Hashtable etwa doppelt so schnell wie das Dictionary und die SQLite-Lösung wiederrum doppelt so schnell wie die Hashtable.