I ended up going with this. The features are:
- high side switching (Q3) to keep tachometer working
- Q3 doesn't use a MOSFET which would be in saturation and not fully on (see MOSFET saturation)
- uncommon components used are inductor L1, Zener diode ZD1 and trimmer R4

The inductor is needed, because my fan (Intel 478) had an internal capacitor. So it would charge up instantly (as much current as the board could supply) and kept the fan powered when PWM was off. The inductor limits this inrush current without limiting the max fan speed as a resistor would.
Because it's switching current through an inductor, a voltage spike will be generated when Q3 closes. This spike must be absorbed somewhere which is what ZD1 is for. My choice of Q3 was tolerant to Vce well above 22V so this Zener diode was sufficient. Pick your Zener based on your transistor. Maybe the inductor could be placed better. Or maybe a freewheel diode would do just fine too. Suggestions are welcome.
The trimmer R4 effectively sets the minimal fan speed.
The PWM pin cannot be connected to Q3 directly because the emitter will be somewhere between 0 and 12V and PWM is only 0 to 5V or even 0 to 3.3V. This wouldn't make any current flow from the base to the emitter so Q3 would stay off when the fan internal capacitor was charged above 5V, resulting in a fan speed limit. So the base of Q3 is pulled up by R3 and pulled down by Q2.
Q2 now has inverse logic so the base of Q2 cannot be driven by PWM directly either because at 30% PWM you would have 70% speed and at 70% PWM you would have 30% speed. So the PWM signal is inverted by Q1.
I have been using this for a couple of months so I know this works.