Whenever you try to retrieve large items from a database it is going to take time.
As you have seen, the best approach is to store the image in the files system and keep a location in the DB (particularly if this is giving you a big problem, as DB files have a limited size, and big images will eat that quite quickly) - but you don't want to do that.
The important thing is to only retrieve images when you actually need them - so never do
SELECT * FROM MyTable
Always specify a field list, and do not include images unless you need them.
There is a tip here which explains how I minimize loading of images in my systems:
On-demand loading of images from a database[
^]