Blender 3.6.0
Testing on Suzanne, ✲ Ctrl5 5 subdivision levels, and this setup:

All measurements are done on the Group Output of the above, while modifying the contents of the i custom group. Throwing out 10% lowest, 10% highest, taking an average, but beware, the testing took much less scrupulosity than the description suggests.
For Entire Geometry
Only Translation |
Only Rotation |
Only Scale |
 |
 |
 |
12 ms! |
40 ms |
40 ms |
Translation & Rotation |
All 3 |
Set Position |
 |
 |
 |
40 ms |
39 ms |
31-32 ms* |
*the Set Position node had much more wild results for some reason, ranging from 29 ms to 49 ms.
It doesn't matter how many of Transform inputs you use, I imagine [confirmed by mod nop] because a transformation matrix is created, and then applied on all the geometry. The exception is if you only translate, this is optimized by just adding a number to all coordinates. Interesting, that a similar optimization wasn't implemented for only scaling (multiply all coordinates by a number; might be updated soon). Anyway, thanks to this translation, the only scenario in which Set Position could be used as a single node, is still won by Transform. And once you start using fields, the performance plummets:

Set Position rotation: ~278 ms
Using a Selection
Let's rotate only the Suzanne's eyes.
Transform: 2245 ms

The separation and joining is very costly. If separating by faces, the time increases to 2840 ms…
Set Position 282 ms

TLDR; conclusions
For entire geometry always use Transform node. When using a selection, always use Set Position. Of course If you want to apply a chain of operations on the same selection, the costly process of separating and joining might be a good investment.