westfw is right about the .hex files. You should be able to find directions here or on avrfreaks on how to merge the two hex files if you need more info. I suggest using a hex editor such as HxD (Windows) to ensure you don't leave any stray characters but notepad should work too if you're careful. Essentially, you'll do the following:
1. Open your firmware file and remove the entire last line beginning with the : character and including CRLF 0x10 0x13
2. Append the entire bootloader hex file contents to the end of your firmware
3. Save this new merged file as something like "MyFirmware_with_Optiboot.hex"
Once you've created this single .hex containing your firmware and optiboot you'll use avrdude to flash it in one step. I've pasted the .bat file I use to do this below which includes everything you need to take a MCU from new/blank to ready to rock. You'll need to customize slightly with the right ISP frequency for your programmer (-B option), the path to your firmware (-u option), COM port (-P option) and make sure those fuse settings match what you want. It should save you a lot of time though with the syntax. Note that this is setup to use Pololu's AVR ISP programmer (my favorite ISP programmer by far and highly recommended) and I've made a couple changes to BOD and LOCK bits from standard Arduino. The last line (rundll) just adds a system "ding" to get your attention when it's done.
rem Atmel Studio
rem -B 1 (1500 Khz, Use pololu config utility)
rem -B 2 (750 Khz, Use pololu config utility)
rem -B 3 (200 Khz, pololu programmer default)
avrdude -B 3 -v -p m328p -c avrispv2 -C c:\arduino-1.0.1\hardware\tools\avr\etc\avrdude.conf -P\\.\COM4 -b 115200 -U flash:w:"c:/Firmware/MyFirmware_with_Optiboot.hex":i -U lfuse:w:0xff:m -U hfuse:w:0xde:m -U efuse:w:0x04:m -U lock:w:0x0C:m
@rundll32 user32.dll,MessageBeep -1