Best way to control 12v dc brushless fans

I'm making a project that requires a bunch of 12v pc fans to be controlled by an arduino (preferably an atmega328p @ 8MHz)
What's the best idea to move forward:

These are my ideas so far:

  1. PWM a mosfet to modulate the fans
    Problem: The pwm frequency causes the fans to make noise because the frequency is in the audible range. I could increase the frequency but at 8 Mhz the max frequency I can get is 15625Hz. I can't change timer0 becaus i need it for millis().
    Running the atmega328 at 16mhz would output 31kHz. I suppose this would greatly reduce the efficiency of the mosfet?

  2. get a digital potentiometer and use it to control a buck converter like the xl4005 ones you can find on ebay. Basically replacing the on board potentiometer with a digital one.
    Problem: I don't have any experience with digital pots. Can the internal resistor handle the possibly higher input voltage of 12v?

4-pin PC fans have the controller inside.
They just need a (5volt) PWM signal on the fourth pin.
They normally need a ~25kHz PWM signal. but I did not see/hear any difference when driven with Arduino's default PWM frequency.

AFAIK ~30 Herz PWM is normally used for 3-pin fans, but if the fans are made for high speed/flow, you could hear some "knocking" on lower speeds.
Leo..