Preheat the oven to 350 degrees F. Grease
a 9-inch-by-13-inch ovenproof dish with 1 tablespoon of the butter
Fill a large pot with water and place over medium-high heat. Bring to a rolling boil
and season with some salt. Add the macaroni and cook until tender but still firm, 8 to 10 minutes. Drain
the remaining 2 tablespoons butter in a large skillet over medium-high heat. Then add the ginger, garlic and onions. Stir and cook until the onions
are just beginning to turn golden, about 5 minutes. Add the garam masala
, paprika, cardamom, chili powder and tomatoes
and cook for 5 minutes. Add the flour and a pinch of salt and pepper and stir for about 2 minutes. Slowly add the milk
and continue to stir as it thickens. Cook until the sauce is thick enough to coat the back of a spoon, 15 to 20 minutes. Add 3 cups of the cheese
and stir until melted.
Add the drained macaroni to the baking dish
, and then pour over the cheese sauce
and stir as it settles and coats all the macaroni. Sprinkle the top with the rest of the grated cheese and the breadcrumbs
and bake until the top is golden and the macaroni
is hot and bubbling, about 30 minutes. Serve hot.