Driving a solenoid, even a proportional one, is best done with pulses. Solenoids have significant inductance, so do their own current filtering. When the pulses are fast enough, the solenoid "sees" only the average current.
Using pulses not only simplifies the circuit, but makes it efficient. Since power isn't wasted and turned into heat, you don't have the problem of having to use large parts and getting rid of the heat.
Here is a simple circuit:
The gate of the FET is driven directly by a PWM output of the microcontroller. Something around 25 kHz PWM frequency should be fast enough for most solenoids so that the current changes very little during one pulse. That is also above the audible range, so you won't hear any whining. Many modern microcontrollers have plenty of PWM resolution left at 25 kHz.
Q1 is used as a switch, and turns on when the PWM output is high. This applies the full power voltage to the solenoid. When Q1 turns off again, D1 provides a path for the existing current to continue circulating.
I've driven proportional solenoids with exactly this circuit in a real commercial product.