AutoLISP _INTERNS_ strings.
Yes, exactly. Though it's worse than just the internal store of string values to be re-used. It also creates immutable strings, i.e. you don't change a string using strcat, you're creating a new one from the combination.
This is the same way as DotNet does it. And there it's also a point of extreme inefficiency. There the usual way to concatenate faster is to use a StringBuilder, basically a growable array of chars which then as a final step gets converted to a string by simply mapping the interned new string with the char array.
Very similar to the vl-list->string idea, except that using the array it would be even faster since that's just an O(1) operation, while the vl-list->string is an O(N) stepping through each value in the linked list in turn. Now, I'm wondering if using a safe-array in Lisp would be similarly beneficial - that is "if you can convert to-and-from a string <-> safe-array".