There is no most efficient way to effectively round edges, this is highly dependent on what type of object you are modeling, how much detail you want, how close you plan to render, the environment your model will be in etc.
There are several ways to go about this, all highly effective depending on the situation they are use in. I would recommend to continue beveling your edges.
Why? Beveling is much more efficient and cheaper than subsurf, you also have better control of your geometry and topology. What you are doing above is using it inefficiently, that shape could be just as rounded with fewer segments, You don't need more than a few or so segments on any edge at a time. It is also worth noting that since it is a modifier, any mistakes you make can be easily undone.
Here are is an object duplicated twice and bevelled with different amount of segments, one has 12 segments and the other has 6, can you immediately tell which one is rounder?
Here are the wires..
As you can see it is highly efficient, it's all in how you use it. As you have it above is overkill for such a simple object, you don't need more than a few segments to round out your edges depending on the complexity of your mesh.
Note: Also using Shade Smooth on your hard surface models can help to make them appear more smooth/round and less faceted as I have done on the objects in the images above. You can also just smooth certain parts of your mesh by selecting the vertices/faces and using the same method.
Also, feel free to use a mixture of modifiers to achieve your final shape or effect, for some objects it is better to use subsurf with edgeloops and for others, subsurf with creases etc. There is no one good or most efficient way to go about it, It all depends on what you need, the model being used and how well you as the artist can determine what the best way to go about it is.
Additionally, you can get more tips here: