Я использую подход с точки зрения производительности по сравнению с интерфейсным подходом, поскольку ваша проблема его представила.
В зависимости от использования вашей базы данных использование опции 2 может вызвать горячую точку в вашей базе данных. Вот более экстремальный сценарий - скажем, что у вас есть 5000 пользователей, вошедших в систему, которая в свою очередь вызывает срабатывание вашего кода, который, в свою очередь, выбирается из таблицы package_options. В любой момент у вас могут быть тысячи пользователей, попавших в эту таблицу.
Это может быть проблема, с которой PG может не справиться с параллелизмом, поэтому только тестирование докажет что-либо. Вы должны проверить это, чтобы убедиться в этом, но об этом следует помнить при рассмотрении этого подхода. Я также проверил бы ваш вариант 1 и посмотрел, какой из них работает лучше, чем простой интерфейс для управления и использования. Учитывая, что тесты, необходимые для этого, было бы относительно просто, почему бы не протестировать его, чтобы вы не застряли в дороге с плохим выбором для вашего сценария использования.