Designing an PCIe ethernet NIC with built in ethernet switch
Is there a better way to do this that would not involve having both
  the controller and switch IC? I know I could have a 2 port controller
  and have a software Ethernet bridge, but I don't want to put the load
  of that on the OS.


An FPGA would be one other way to implement a switch in firmware and meet your no software load requirement. There are some unman-aged switch IP cores available from Xilinx and others. 

I've seen some neat things done with FPGAs and ethernet. One is a company that does an ethernet bridge when the computer is off with two phys and an FPGA for a high reliability application. When the computer turns on and the software is loaded the FPGA forwards the packets to the PC, that way the packets are always going through. When off the card functions like a physical Ethernet bridge.