Did not quite read everything but...
I usually only have one global dummy TEXT. When I want to render text, for instance for individual signs, dialog with NPCs and so on, I copy the string(s) to that TEXT object and use draw_obj(...) to draw it.
IMO that's a much cleaner approach as you don't have to manage text creation, delete and set/ reset the SHOW flag (for example on level change).