If you're using something like
mod_perl then you can just save the results of a
DBI fetchall_hashref() call and use it instead. For things that change extremely rarely, like province/state abbreviations, country codes, and so forth, you can presumably cache this "forever", or at least until the next restart. Where your data changes slightly, you just expire it now and then using
undef and let your resolver re-cache new data.
The more daring approach would use something like
DBIx::Cache which does seem to promise a lot, but with a word of warning that it is experimental and "for exploratory use only". A more robust version could be very useful indeed.