caching database stuff

maybe you could use the backgroundrb plugin

it can run ruby code in socalled "worker classes" (who have access to
your models) in independent threats, therefore running alongside your
rails application and surviving the request-response cycle.

1) Create a Worker that, on startup, gets all (sub)categories, maybe in
an instance variable. Those will be available until the Worker is
deleted/restarted. (unless my lack of ruby knowledge lead to an error
of thinking here)
2) add a method to the Worker that can return the categories instance
variable to your rails app.
3) add a method to the Worker to destroy & rebuild your category list,
then you can call this method when you add/remove/change a category in
your application

sounds a bit weird? read on here:

http://backgroundrb.rubyforge.org/