Faces are only z-sorted when you use semi-transparency. These sort is expensive, therefore it should be used with caution.
Please be aware that z-sorting is not deterministic. This means it does not always has a result. (Relatively fast) z-sorting can easily lead to incorrect results.
Solid faces can be rendered in any order when using z-Buffer (which provides the correct z-order per pixel).
Faces within the camera frustum are already calculated in a fast way (this is the core of any 3D render engine).
You need to stop thinking of algorithms as master solutions. Though they are useful (for obvious reasons), they have their benefits and draw backs for each application, and it’s not as simple as just taking the most performance for one case and “adding it” to another solution. For example a kdtree is good for nearest neighbour searching, but not so useful for rendering.