I was thinking that another option to avoid the spike problem would be the insertion of a small capacitor at the base side of transistor so that could form an RC network with a time constant near to switching frequency, therefore performing the control of the fan not at pulsed way, but biasing transistor with a continuous and variable current depending on duty-cycle.
However should be not easy to determine a linear region of the transistor without a previous simulation or polarization calculus. Another possible drawback of such an approach is the fact that depending on the transistor characteristics ( namely, the intrinsic range of current gain defined by manufacturer ), a small adjust on RC network certainly would be required.