Preheat the oven to 350°F (175°C) and lightly grease a 9x13-inch baking dish.
Brown the ground beef and Italian sausage in a large skillet over medium-high heat, breaking the meat into crumbles, about 7 to 8 minutes. Add the onion and cook until it softens, 3 to 4 minutes, then stir in the garlic, Italian seasoning, salt and pepper and cook one minute more. Drain off the grease.
Set aside 1/2 cup of the marinara sauce, then stir the rest into the meat. Turn the heat to low and let it simmer while you cook the pasta.
Cook the spaghetti in well salted water 1 to 2 minutes short of al dente. Drain and toss it right away with the butter and the reserved 1/2 cup of marinara so the noodles stay loose.
Stir the cream cheese, cottage cheese and sour cream together until mostly smooth. A few small lumps are fine, they melt in the oven.
Spread half the spaghetti in the baking dish. Spread the cheese mixture over the noodles in an even layer, then cover it with the rest of the spaghetti.
Spoon the meat sauce over the top and spread it to the edges so every bite gets sauce.
Scatter the mozzarella and parmesan evenly over the sauce.
Bake uncovered for 30 to 40 minutes, until the cheese is melted and the edges are bubbling. If the top browns before the center is hot, tent it loosely with foil.
Let the casserole rest for 15 minutes before cutting. Sprinkle with parsley and serve.