IMHO the OpenSubdiv method is the better one, but with a downside wich is the amount of polygons, you need to increase the subdivision levels quite a bit to get the desired result, you can mix this with a light version of the old school technique of support edges, and you will end with a pretty clean mesh with very few support edges.
But in the end I'm very happy with OSD, even with the amount of polygons needed, what we need in corona is native support with OSD adaptivity, adaptivity is not still implemented in max either, but in the future I'm sure OSD will be the best way to work, forget about chamfers and support edges that make a simple mesh impossible to modify/manage.
Cheers!