Если значения option идут по порядку, то можно их генерировать на клиентской стороне.
Если нет, можно использовать такую конструкцию:
<script src="myselect.php?session_token=1234567"></script>
, где myselect.php возвращает яваскрипт. session_token - случайно генерируемая строка, уникальная для каждой сессии, исключительно для того, чтобы на одном браузере можно было логиниться под разными пользователями, и одному не доставался кешированный скрипт другого.
Сам php должен генерировать (и проверять) E-Tag, характеризующий состояние таблицы БД (или другого источника). Скажем, количество записей и какой-нибудь хеш от их значений. И если E-Tag совпадает, отдавать 304 Not Modified.