Heat olive oil in a large pot or Dutch oven over medium heat. Add the ground beef and cook until browned.
Add the diced onion and cook for 2–3 minutes, then stir in the garlic and cook for another minute.
Pour in the beef broth, milk, tomato sauce, and diced tomatoes. Stir to combine.
Add the pasta, dried basil, salt, and pepper. Bring the mixture to a boil, then reduce the heat and simmer uncovered for about 12–15 minutes, stirring occasionally.
When the pasta is tender and the sauce has thickened slightly, remove from heat.
Stir in the mozzarella and Parmesan cheese until melted and creamy.
Serve hot, garnished with parsley if using.