Если константность Вам досталась по наследству и Вы не можете этого изменить, то выбирайте любой вариант и не надо слушать всяких снобов о «некрасивости, неэтичности» и прочем. Все эти «неэтичные» средства в языке, как раз и созданы для того, чтобы обрабатывать нестандартные ситуации.
Если по теме, то я бы выбрал mutable.
К примеру, для того, чтобы сделать getItem для потоко-безопасного, разделяемого контейнера может потребоваться использование mutex.lock(). При этом, getItem семантически является константным, и должен быть объявлен как getItem const; но чтобы лочить mutex в этом методе, необходимо его изменение. Где бы Вы не встретили решение подобной проблемы, бьюсь об заклад, что mutex будет объявлен как mutable поле класса.