Я не уверен насчет поведения кэша с display: none
(оно, вероятно, зависит от браузера), но вы можете получить изображение в кэш браузера, не отображая его, создав объекты изображения в JavaScript. Изображение не будет отображаться, пока вы не добавите его на страницу.
var image = new Image();
image.src = 'example.com/image'
Что касается «есть ли способ вручную указать время кэширования для загруженного изображения?», То есть, но об этом говорится в ответе HTTP, который доставляет изображение в браузер. У Google есть хороший пример: https://developers.google.com/speed/articles/caching