The current code is complicated because the const& versions return const&. Which leads to bugs without && versions. It is worth examining whether returning by a value is performant enough to eliminate the && version.
The way to approach it is to create a benchmark that runs indexable getter in a loop. The parameter to tweak would be the size of the Geometry it return. We would want to see how it affects things, and whether there is an inflection point. Would need to run it for the different compilers.