In a large skillet or pot over medium heat, brown the ground beef, breaking it up as it cooks. About halfway through, add the diced onions and continue cooking until the beef is fully cooked and the onions are tender.
Stir in the garlic and cook for about 30 seconds, just until fragrant. Remove the beef mixture from the pan and drain off any grease. Set aside.
Return the pan to medium heat and add the butter. Once melted, stir in the flour and cook for 30 seconds to 1 minute, stirring to form a roux.
Slowly whisk in the beef stock. Once the mixture begins to thicken, whisk in the tomato sauce, Italian seasoning, salt, pepper, and heavy cream until fully combined.
Stir in the cheddar and parmesan cheese and continue stirring until the cheese is melted and the sauce is smooth.
Add the cooked pasta and ground beef back to the pan. Stir until everything is well coated in the sauce and heated through.
Garnish with fresh parsley and grated parmesan if desired. Enjoy!