Если честно, то компонент Image вообще какой-то кривоватый.
При работе с картинками я сделал специальную обвертку вокруг Bitmap, пронаследовав UIComponent, а загрузкой непосредственно графики занимается отдельнй класс, использующий Loader. Загруженная BitmapData затем асайнится моему компоненту. В классе, отвечающем за загрузку, реализован 1й вариант кеширивания, который вам не подошел, но мне такой подошел отлично. Хотя можно и реализовать и вашу логику.
Спасибо за комментарии.
Нашёл что-то вроде бага во flash под FireFox (под opera/ie всё норм) — если есть Image, для которого source'ом является Bitmap, и этот Bitmap обновляется тем же bitmapData, то первым кадром выводится полная картинка (без увеличения/уменьшения) и только на следующем кадре она выводится в заданном размере (flash берёт «паузу»)
Лечится просто — вставить перед
super.source = new Bitmap(cached_imageData[cachedFilenameID]);
проверку
if((super.source is Bitmap) && (super.source.bitmapData != null) && (super.source.bitmapData == cached_imageData[cachedFilenameID]))
return;
Это вообще надо в код добавить, чтобы не создавать лишний Bitmap каждый раз
Прозрачное кеширование изображений во Flash/Flex