How to save curve shape of cylinder with such deformations and to get it with clear topology?
You can use Shrinkwrap Modifier with Vertex Group and another Cylinder as Guide mesh to do this.
Create Cylinder in the same place as original. Lets call it Guide Mesh. It can be higher (Z axis) but it should have exactly same Radius. Without top/bottom faces. Add to it Subdivision Surface Modifier - Subdivisions 6. You can Hide it.
In Original Mesh (the one you have modeled) select outside vertices. The ones that should be perfectly round. Add Vertex Group and Assign them.
Add to the Original Mesh Shrinkwrap Modifier and choose created Vertex Group and Guide Mesh as a Target.
Note: You will need to Apply Shrinkwrap modifier in order to move/scale/rotate mesh or you can do this with Guide Mesh selected also.