for point 4, I loop though the edict list. What would be the advantages of your method ? Most MODs would make changes to their CBaseEntity anyway...
for point 6, you already can get the edict after a trace: use
Code:
gameents->BaseEntityToEdict (tr.m_pEnt)
it's a method from the IServerGameEnts interface, the provider of it is gameServerFactory()