Render polygons with an opacity < 100% from back to front, then with a z-buffer enabled you render opaque polygons from front to back but remember to minimize vertex buffer switches / changes.
You could store your transparent polygons in a bsp, then you can extract them depending on your viewpoint in the correct order. The disadvantage of that is that you can't build strips of your triangles.
One other technique I heard of was to sort triangles "inside-out", then first render the backfacing triangles and then render the frontfacing triangles. That is good enough for many convex shapes.
Many games (for example Jak + Daxter on PS2) don't bother depth-sorting all triangles, because the "transparent object over transparent object" case is rare enough, and you're normally busy enough running around and dealing with traps and monsters to not see the sorting errors.
One other method is to draw your transparent polygons with a locked colour buffer, so you only get the Z values. Then you draw them again with the depth test set to "equal". This of course doesn't allow "transparent on transparent", you'll only get the frontmost triangle rendered over the opaque triangles.
If you're concerned about the rendering order to minimise state changes I agree with Kislinskiy's advice.