Return the string.
I think the better abstraction is worth it. Until you can measure a meaningful performance difference, I’d argue that it’s a micro-optimization that only exists in your imagination.
It took many years to get a good string abstraction into C++. I don’t believe that Bjarne Stroustroup, so famous for his conservative “only pay for what you use” dictum, would have permitted an obvious performance killer into the language. Higher abstraction is good.