This is one of the things I want to investigate. The renderer uses the BSP tree order to automatically sort the surfaces of the map, so why not use it for sorting the entities too?
It occurred to me that the reason why engines that sorts entities by depth does so by comparing XYZ coordinates is because, by default, the order of the entities in the renderer does not follow the BSP order of the visibility data used by the network protocol to filter which entities should be sent.
Theoretically, it should be possible to automatically order entities by following their order in the network messages. When the server creates the message, multiple entities in the same BSP area could be sorted by coordinates, and each entity group would be sorted by the BSP visibility order. This would also result in all clients on a server getting depth-sorted entities for free.
I predict there could be some complications with network compression, and this still wouldn't be enough to solve depth conflicts with world surfaces (e.g. translucent entities behind/infront of translucent water). Also, I don't know if there's any need for such an approach in hardware-accelerated engines. But at least in theory, this seems to provide a more efficient way to sort lots of translucent entities at once.
Any thoughts?