Preheat the oven to 400°F and lightly grease a 9x13 casserole dish.
Dice the chicken and season with salt, pepper, and Italian seasoning.
Heat the olive oil in a pan over medium-high heat and saute the chicken for 5-8 minutes or until done. Remove and set aside.
Reduce the heat to medium-low and add the butter, stirring to loosen the brown bits on the bottom of the pan. Add the onions and cook for about 4 minutes until softened. Add the garlic and cook for 1 minute.
Sprinkle the flour over the onions and toss to coat. Cook, stirring with a whisk for about 2 minutes, until you can no longer smell the flour and it begins to turn golden.
Slowly add the chicken broth while continuing to stir. You want the roux to maintain its thick consistency as the broth is added. Add the milk a little at a time. Continue to whisk until combined and smooth. Leave to simmer and reduce while you cook the pasta.
Fill a large pot with water and bring to a boil. Add the spaghetti and follow the package directions to cook to al dente. When the pasta is ready, transfer it to a colander to drain.
Add the softened cream cheese to the simmering sauce and stir continuously until fully melted and smooth.
Reduce the heat to low and let the sauce cool slightly. Sprinkle in the shredded cheddar and stir to combine.
Drain the diced tomatoes and add to the sauce along with the diced chicken. Stir well to combine.
Stir in the drained spaghetti and then transfer to the prepared casserole dish. Top with the shredded mozzarella cheese and bake uncovered for about 15 minutes. If you like, the casserole can be broiled for a few minutes. Watch it closely so it doesn’t burn.
Remove the casserole from the oven and garnish with red pepper flakes and fresh parsley as desired.
Serve and enjoy!