Preheat oven to 375 degrees. Spray a 9 x 13 baking dish with non-stick cooking spray.
Bring a large pot of water to a boil. Season with 1/2 TBS salt. Add pasta and cook per directions on back of package for al dente. Drain pasta and place back into pot.
In a medium bowl combine ground beef, egg, minced garlic, minced onion, black pepper, and Italian seasoning.
Form round shaped meatballs using 1 TBS of ground beef mixture for each meatball. Place meatballs on a plate. (Recipe makes approx. 22 small meatballs)
Place 2 TBS butter into a skillet and allow to come to a sizzle over medium high heat. Place meatballs in hot skillet and cook until browned on bottom. Turn meatballs over and cook until browned on that side. Rotate them around until all sides are browned and meatballs are cooked through. Remove to a plate and set aside.NOTE: Place lid on them halfway to steam. Temperature of meatballs should be over 165 degrees using a kitchen meat thermometer. Melt 2 additional TBS butter in same skillet over the medium high heat. Sprinkle in 2 TBS flour and whisk for 1 minute. Slowly whisk in 2 cups milk. Season with a 1/4 tsp of garlic powder, onion powder, and black pepper. Whisk until it thickens up.
Bring mixture to a boil then turn off heat. Add in 1/2 cup shredded cheddar cheese, 1/2 cup shredded mozzarella cheese, and 1/4 cup shredded parmesan cheese. Stir until all cheese has melted and sauce is smooth.
Add in 2 handfuls for fresh spinach and mix to combine. Pour mixture into the pot with the drained cooked pasta. Add in 1 cup chicken broth, Mix together. Fold in cooked meatballs.
Pour mixture into prepared baking dish and smooth evenly. Top with remaining cheeses evenly across the top. Top with cracked black pepper.
Bake in preheated oven for 15-20 minutes until heated through and cheeses are melted and golden brown.