I have a query where I am searching against a string:
SELECT county FROM city WHERE UPPER(name) = \'SAN FRANCISCO\';
Now, this works fine,
DB2 isn't strong regarding collation. And it doesn't have function-based indexes.
Niek Sanders's suggestion would work, if you can accept that the hashing has to happen in your application (as DB2 doesn't have SHA or MD5 functions, as far as I know).
However, if I were you, I'd create a materialized view (MQT == Materialized Query Table, in db2 parlance) using CREATE TABLE AS, adding a column with a pre-computed upper-case variant of the name. Note: You may add indexes to materialized views in DB2.