Technically speaking, By.ID() is the faster technique because at its root, the call goes down to document.getElementById(), which is optimized by most browsers.
But, finding elements using XPath is better for locating elements having complex selectors, and is no doubt the most flexible selection strategy. But it can be very slow, particularly in IE. Its also important to note that IE 6, 7, or 8, are slower with XPath when compared to Firefox. So, browser compatibility also makes a slight difference here and there.
So my take on this issue is, if you ever need to find an element using a complex selector, I would recommend using CSSSelectors, whenever possible. It's not quite as flexible as XPath, but will cover many of the same cases, without exhibiting extreme performance penalty on IE that XPath can.