If you are going to use a digital controller, and you have control over how the input is used, and you have sufficient resolution it's hard to beat an encoder or other digital position sensor. As long as the encoder is fine enough that you get plenty of offset between samples you get very good zero-drift readout.
If you are going to use all-analog control then using a position device and taking the derivative can get very noisy, so using a tacho may be the better choice -- but with a tacho you are almost guaranteed some drift, unless you also have a position readout.
While you're looking at feedback devices you should also consider using a resolver (unless yours is a low-buck application). They're also non-contact, they can give very good results, and a digital-to-resolver converter usually includes a very clean velocity output if you want to have an analog rate loop wrapped by a digital position loop.