Rotate object on axis between two points
We have several transform orientations available within the 3D view that determine which way an object moves along a given axis.



When these options don't fit the task you can define a custom orientation. This option is available in the properties sidebar N



To put it simply, if you add an object and rotate it 23.6 degrees on the z axis and then use it to define a custom orientation, you can then use that orientation to move, rotate or scale another object along the same x and y axis which will be at 23.6 degrees from the world x and y axis. 

To use this when you have two empties in place -


Select one empty and press ShiftS and select Cursor to Selected.
Add a plane and scale to zero on the x axis (SX0Enter).
Enable snapping to vertex  in the 3D Header.
Ensure the view is aligned to a preset (left, top, front...) that is looking straight at the two empties so that the only angle between the two is the angle you want to define. If you wish to define an orientation that alters more than one axis you can repeat the next step several times from three views to get the alignment right.
Begin rotating the plane R and move the cursor over the second empty. When a circle is shown around the centre of the empty showing that it is snapping to it, accept the rotation. The rotation of the plane will now match the angle between the two empties.
Show the properties sidebar and find the Transform Orientations panel, create a new orientation by clicking the .


The plane can now be deleted and the new transform orientation can be used to move or rotate other objects along an axis running parallel to a line between the two empties.

When a custom orientation is selected the XX, YY and ZZ shortcuts normally used to move on the local axis will use the custom axis instead of the local axis.