The only Arduino at this time with a hardware DAC is the Arduino Due, based on the Atmel SAM3X8E, which has two 12-bit DAC channels. The main clock is 84 MHz and
The DAC output range is 1/6 to 5/6 of the AREF pin, which on the Due board tied to the 3.3VDC line through a resister, that must be removed to use AREF with an external reference. The range of values producible on the standard Arduino Due are [0.55, 2.75] VDC.
The SAM3X datasheet has the following to say about the DAC conversion time, which seems to suggest 50 cc of the main clock per conversion, which would place a maximum conversion frequency of 1.68 MHz.
45.6.1 Digital-to-Analog Conversion The DACC uses the master clock (MCK) divided by two to perform conversions. This clock is named DACC Clock. Once a conversion starts the DACC takes 25 clock periods to provide the analog result on the selected analog output. ... 45.6.3 Conversion Triggers In free running mode, conversion starts as so on as at least one channel is enabled and data is written in the DACC Conversion Data Register, then 25 DACC Clock periods later, the converted data is available at the corresponding analog output as stated above. In external trigger mode, the conversion waits for a rising edge on the selected trigger to begin. Warning: Disabling the external trigger mode automatically sets the DACC in free running mode.
There is a “max speed mode” that would save off 10% of the time.
45.6.7 DACC Timings ... A max speed mode is available by setting the MAXS bit to 1 in the DACC_MR register. Using this mode, the DAC Controller no longer waits to sample the end of cycle signal coming from the DACC block to start the next conversion and uses an internal counter instead. This mode gains 2 DACC Clock periods between each consecutive conversion. Warning: Using this mode, the EOC interrupt of the DACC_IER register should not be used as it is 2 DACC Clock periods late.