Bring large pot of water to boil for the pasta.
While waiting for water to boil, start the sauce.
In large saucepan, heat olive oil over medium heat. Add onions and and saute until translucent, about 5-7 minutes.
Add garlic and cook one more minute.
Add flour to onion mixture and stir to combine. Let cook another 1-2 minutes.
Slowly add half and half and then the milk, stirring continuously.
Add tomatoes then cook another 7-10, stirring often, to let sauce thicken.
While the sauce cooking, add pasta to boiling water and cook according to package instructions.
With an immersion blender, puree sauce until your desired consistency. I left a few chunks, but wanted my sauce pretty smooth.
Add basil and Parmesan and stir until melted. Season with salt and pepper, to your liking
If sauce is too thick, add about 1/3 cup of the pasta water to thin it out, if you feel that is needed.
Add pasta to sauce and stir to combine.
Serve topped with additional Parmesan cheese. Enjoy!