What's the best way to add USB support to a project
It depends on your volume. If you're making thousands of your board, then it's probably best to find a chip you like, lay out your PCB for it, and use that. My personal favourite is NXP's LPC11U-series. They're nice because they're modern ARM Cortex cores, have a built-in bootloader that emulates USB storage. So when you enable the bootloader and plug in your device, the computer it's plugged into will show it as a USB drive. You can then copy/paste in a new firmware binary there and upgrade it like that. It makes it super easy for you and your end-users to upgrade firmware.
Writing firmware for them is also very nice and easy thanks to the mbed project which supports those chips.

If you're doing something low-volume, then use modules, the cheapest you can find. Go to Aliexpress.com or Alibaba and look for Arduino clones. The clones of the Arduino Nano are great and they have ATmega32u4-based ones too. These boards are ridiculously cheap, going from $2.5 USD to $5.50. In low volumes, a USB chip, plus passives, plus connector, will run you more than that, so it's a crazy good deal.

Avoid FTDI at all costs. They're a rotten company and have screwed over people pretty bad by bricking clones of their chips on purpose. You can read about that here: http://arstechnica.com/information-technology/2014/10/ftdis-anti-counterfeiting-efforts-sit-between-a-rock-and-a-hard-place/
While it may seem like breaking cloned devices is OK, a lot of people paid FTDI-prices thinking they got genuine chips but were actually counterfeit. The supply chains for these are complex enough, and the clones good enough, that it's very difficult for manufacturers to tell them apart.