I can drop a script on you in-world that will do this... it's not fancy, but works well (and the price is right

). You just place it in a prim, tweak the script to enable/change the access list (if desired) and put in the destination coordinates.
Edit: Sent you one in-world. Make sure to compile (save) it with the 'Mono' checkbox checked in the script editor, or you will get stack/heap collisions when you try to use it.
The script as-is is a good general purpose teleporter. If you want to make one for different destinations, it wouldn't be difficult to add a menu via llDialog (if you are handy with scripting). If you're lazy, though, you can make a nice little multi-destination teleporter by putting the script in different 'buttons' on a display (unlinked!), and setting the 'When Left-Clicked' property of each prim to 'Sit'. Someone touches the button... poof, there they are.
Good luck

For others interested, here's the source (I just know the forum code is going to screw up the formatting, but it should still function):
// Modified by Tengu Yamabushi (access list, 4096m support)
// - original warpPos R&D by Keknehv Psaltery, posted to forums on 05/25/2006
//
// Activate/Change the access list and destination coords to suit,
// then this script in a prim. Sit on it, you're done

//
vector Destination = <230,250,4002>; //Alter these coordinates to suit
integer UseAccessList = 0; //Set this to 1 to use the access list, default
//is to allow everyone
//If using the access list, extend this list to include those folks allowed.
list access=["YourFirstname YourLastname", "OtherFirstname OtherLastname"];
warpPos( vector d ) //R&D by Keknehv Psaltery, ~05/25/2006
{
if ( d.z > 4096 ) //Otherwise we'll get stuck hitting the ceiling
d.z = 4096;
//The number of jumps necessary
integer s = (integer)(llVecMag(d-llGetPos())/10)+1;
//Try and avoid stack/heap collisions
if ( s > 600 )
s = 600; // 6km should be plenty
//Solve '2^n=s'
integer e = (integer)( llLog( s ) / llLog( 2 ) );
list rules = [ PRIM_POSITION, d ]; //The start for the rules list
integer i;
for ( i = 0 ; i < e ; ++i ) //Start expanding the list
rules += rules;
integer r = s - (integer)llPow( 2, e );
if ( r > 0 ) //Finish it up
rules += llList2List( rules, 0, r * 2 + 1 );
llSetPrimitiveParams( rules );
}
init()
{
llSitTarget(<0.0,0.0,0.1>,ZERO_ROTATION);
llSetSitText("Teleport"

;
}
default
{
state_entry()
{
init();
}
on_rez(integer times)
{
init();
}
changed(integer change) {
if (change & CHANGED_LINK)
{
key agent = llAvatarOnSitTarget();
if (agent != NULL_KEY)
{
if (UseAccessList)
{
if (llListFindList(access,[llKey2Name(agent)]) == -1)
{
llUnSit(agent);
return;
}
}
vector oldpos=llGetPos();
warpPos(Destination);
llUnSit(agent);
warpPos(oldpos);
}
}
}
}