RGB LEDs in automotive environment with fluctuating voltage
simulate this circuit &ndash; Schematic created using CircuitLab

This is a good first cut. The Arduino output is assumed to be 3.3 volts, and the total of 33 k load on it should not change that appreciably. C2 gives a turn-on/turn-off time of a millisecond or so. OA1 is a single-supply, rail-to-rail opamp. With 1 volt on the + input, it will drive enough current through Q1 to produce 1 volt across R2, which in this case will be 10 mA. You can change the LED current by changing R2. The R5/C1 network will keep noise on the 12V line from upsetting the op amp.

The opamp should not draw much current, and the Q1/R2 combination is no less efficient than a simple resistor.