Cook the spaghetti until al dente in a large pot of boiling salted water according to package instructions until al dente. Drain and set aside. Preheat the oven to 350 F
While the pasta is cooking, heat the butter in a large skillet over medium-high heat and cook the onion and garlic until translucent, about 2 minutes. Sprinkle and whisk the flour on top and cook until golden brown, about 2-3 more minutes.
Slowly whisk in the chicken broth until no lumps remain, and cook for about 3 minutes until thick. Season with salt, pepper, oregano, basil, parsley, and red pepper flakes.
Sprinkle half of the shredded cheddar and mozzarella into the skillet, and stir until melted.
Gently fold the cooked spaghetti, half and half, chicken, and diced tomatoes into the sauce mixture until everything is well combined. Be careful not to break the pasta.
Spoon the mixture into a greased 9x13-inch casserole dish and sprinkle the remaining cheddar and mozzarella on top. Bake for 20-25 minutes or until the cheese is melted and bubbly.