The uneven line segments around the notches are the problem. Keep the cylinder's edge segments parallel and use them as support loops. Inset and cutout geometry should fall between edge segments and not on edge segments. This can be done in the round or in a flat strip bent into a circle.
Rough sketch of the basics.
You may need more geometry to support details.
Modeled flat and bent round with a 2X subdivision modifier.
Building on what Neox has suggested: in Blender you can run a limited dissolve and use the delimit option to preserve edge loops.
Here's a quick example where I've sharpened the edge loops I want to keep and run a limited dissolve with a sharp delimiter. Triangulate the mesh along shortest diagonals and convert tris to quads to cleanup the N gons and it's ready for any manual tweaks.
Depending on how you're going to bake it you could just use sharp edges along your UV seams or you could use a bevel weight and bevel modifier to add edge loops around the cutouts. A little minor cleanup with loop select and edge loop delete and you should be good to go.
If you do need to do some manual cleanup: vertex connect path is handy for connecting two points since it will automatically slice across any edges it encounters. Otherwise the knife tool can grab a starting vert and constant angle will keep the tool straight up or down which is quick and precise.
IMO (in this case) the key is to keep the cleanup as automated as possible before you go in manually adding or subtracting loops one at a time.
You're on the right track. Curves can be expanded into 3D geometry using the options in the Object Data tab.
For single strand safety wire: use curves to create a path then go into Object Data > Bevel > Depth and Resolution. The depth field controls the diameter of the wire and the resolution field controls the number of segments. From there you can tweak the curve how ever you want and it will auto update the 3D geometry.
For multi strand cords: create a curve based path and create a mesh based segment. From there you can use the screw, simple deform twist and array modifiers to generate the rest of the cord without having to manually model each section of it. The curve modifier at the bottom of the stack makes the mesh segments follow the path. The mesh segments (highlighted in orange) control the geometry generated by the modifiers.
Blender lets you convert mesh to curves and curves to mesh so take advantage of that where you can. Sometimes it makes sense to grab edge loops off the base mesh and use those for the basis of your curve so you're not spending a lot of time manually placing or manipulating verts.
Having spent most of my adult life in a game-dev desert, being unable to relocate due to family commitments and ending up working for some really dodgy bastards there are strong echoes of my own experiences here and it's hit me right in the feels. I was fortunate enough to find a path out but I remember the feelings well.
I will say that if you spent several years being gainfully employed in the game industry (shitty as the experience might have been) I don't think 'failed' is the word you're looking for.