Here is another workaround to the problem, which I have also struggled with a lot.
You create a new transform orientation from the selected vertex, face or edge.
This creates the orientation and puts it in the list of available orientatons, it also selects it as the current one.
The list will look like this:
Here we see some custom orientations added by me.
The normal of the object used will be the new Z-axis of an orientation. I am not sure how the other axes are calculated, but they also adapt somewhat to the selection.
In the moment you create a orientation, you get the chance to give it a name of your choice in the transform panel (T).
The users orientation added seems to be saved in the blend file.
If you alter the object that an orientation originated from, the orientation will not change in any way.
Now if you in edit mode want to for instance grab part of the mesh along the selected orientations Z-axis, you press GZZ (press Z twice)
The text below tells that the orientation Vertex.001 is used.
The orientations are listed in the properties shelf of the 3D view (N).
They can be renamed or removed from there.
Also note that if you want to extrude or extrude-scale some geometry (initiated with E or E S) with respect of the custom orientation, you will need to cancel the extrusion with Esc and then G or S respectively. That is because extrusions will always use the "Normal" orientation as an alternative to the global, but grab or scale uses the custom orientation as the alternative.