Probably the simplest way is to do what you are thinking. Put a Game Logic at the top and at the bottom of the building. Call one of them GL_Bottom and the other GL_Top
then somewhere - in their init fields or in init.sqs put:
GL_Bottom addAction [{Teleport up},{Teleport.sqs}]
GL_Top addAction [{Teleport down},{Teleport.sqs}]
Teleport.sqs looks something like:
_obj = _this select 0
_man = _this select 1
if (_obj == GL_Bottom) then {_man setPos getPos GL_Top} else {_man setPos getPos GL_Bottom}
exit
Totally untested, but it might give you some ideas.