Und die folgende Zeile würde ich genau andersrum machen:
where cast(Datum as Date) = :EingabeDatum
Also nicht (für Mio. Datensätze) das Feld "Datum" in einen anderen Datentyp casten, sondern den Parameter :EingabeDatum einmal in den Datentyp vom Feld "Datum" casten.
Vor allem wenn auf dem Datumsfeld ein Index ist, wird dieser durch das Cast sehr wahrscheinlich ingoriert. Kein Index = langsam