Robi,

versuch mal folgendes:
Generiere eine View mit allen Spalten der physischen Datei und einer zusätzlichen Spalte mit dem gleichen Namen wie das Schlüssel-Feld im Index und mit die 100% gleichen Syntax upper(Text) wie in der Index-Definition, also gleiche Groß/Kleinschreibung keine zusätzlichen Blanks etc.

Anstatt auf direkt auf die physische Datei zuzugreifen, verwende die View und die neue Spalte (auch in den WHERE-Bedingungen).

Übrigens solange Like 'XXX%' verwendet wird, kann der Optimizer auch einen Index verwenden, das ist nicht das Problem.
... und das merkst Du auch beim Query400, hier wird wahrscheinlich ein Index verwendet
Das Problem ist, dass auf der linken Seite des Vergleichsoperators (LIKE) die "Original"-Spalte "verändert" wurde.

Auf welchem Release bist Du eigentlich?
Bei 7.2 oder höher wird auch Query400 (wie übrigens auch alle anderen non-SQL-Zugriffe, u.a. native I/O oder UPDDTA) über SQL bzw. über die SQE ausgeführt.

Birgitta