Since you are using a PIC, I would suggest something as simple as 1 FET or BJT darlington driving the fan at 12V, and a PWM for the PIC output.
This way you can make the PIC output any voltage from 0 to 12V with only 1 pin.
Maybe your PIC already has embedded PWM. If not, PWM is simple to implement, just set the output pin lowhigh for, say, 500us, then highlow for 700us, and keep doing this forever. This way you will have a pulse of 1200us width with 5841,3%7% duty cycle, which, after inverted by the BJT or FET, is equal to 5Vrms at 833,33Hz.
More examples:
1200us low1200us high, 0us highlow = 12V12V
700us low700us high, 500us highlow = 7V7V
300us low300us high, 800us highlow = 3V3V
Circuit should be something like this:
simulate this circuitsimulate this circuit – Schematic created using CircuitLab