I am the first to admit I am not a good (or even passable) programmer, but I could not find a work-around for this that did not include a c_trace. Here is roughly what I came up with to test:
Code:

var EntLoc[3]=-1536,-896,50; //the firstloc of the entity

entity* TestEnt;

string Warlock = <warlock.mdl>;
string TestString (Testing);

function CreateEntTest();
function DrawText();

function DrawText()
{
var TextPos; //where the text should appear
TestEnt = my;
while(1)
{
vec_set(TextPos,vector(my.x-20,my.y,my.z+55)); //sets the 'text' above the model.Play with the + values
vec_set(temp,TextPos);
vec_to_screen(temp,camera);
if (c_trace(TextPos,camera.x,IGNORE_ME|IGNORE_PASSABLE)==0&&temp!=0)
{
draw_text(TestString,temp.x,temp.y,vector(255,50,50));
}
wait(1);
}
}

function CreateEntTest()
{
ent_create(Warlock,EntLoc,DrawText); //creates the entity at the current location and calls the DrawText function
EntLoc.x+=256; //increases the location by 256 units. Sometimes its created behind blocks etc.
}

on_a=CreateEntTest();




That is of course quick and dirty for testing. It works ok...except for a couple issues. The text gets bigger the further away the entity is, as well as a few other size and location formatting errors. I think I have to come up with a different method because it looks goofy