Сжатие (удаление ненужных метаданных и поиск более эффективного алгоритма сжатия) - неплохое начало для изображения с приличным компрессором изображений. Уменьшение количества цветов, изменение формата (GIF или PNG24 на PNG8), когда это возможно.
Это может быть совершенно очевидно, но ... отложите его до полной загрузки страницы (если контрастность цветов на фоновом изображении не нужна для того, чтобы текст на переднем плане читался).
Простой способ сделать это - сделать селектор css для фонового изображения зависимым от класса в теле, например:
...
<style type="text/css">
/*<![CDATA[*/
body.page-loaded{background:url(/path/to/image.jpg)}
/*]]>*/
</style>
</head>
<body class="page-loaded" onload="document.body.className+=' page-loaded';">
...
Конечно, атрибут «onload» в теге body должен быть перенесен (в тег SCRIPT внизу страницы или во внешний файл JavaScript). Также этот код не требует никакой библиотеки JS для запуска; вероятно, он должен использовать наблюдателя событий.