Heat the olive oil in a large pan over medium heat. Add the chopped onion and cook until soft and translucent. Stir in the garlic and cook briefly until fragrant.
Add the ground meat and cook until fully browned, breaking it up as it cooks. Season with salt, black pepper, thyme, chilli flakes, and Italian seasoning.
Add the chopped tomatoes, stir well, and let the sauce simmer until thick and rich. Taste and adjust seasoning if needed, then remove from heat.
To make the béchamel sauce, melt the butter in a saucepan over medium heat. Add the flour and cook for about one minute, stirring constantly.
Gradually whisk in the cold milk until smooth. Continue cooking and stirring until the sauce thickens. Season with a pinch of salt and black pepper, then remove from heat.
Spread a thin layer of meat sauce in the bottom of a baking dish. Add a layer of lasagna sheets, followed by meat sauce, béchamel, and a sprinkle of mozzarella. Repeat the layers until the dish is filled.
Finish with a final layer of béchamel sauce and grated mozzarella on top.
Bake in a preheated oven at 350°F (180°C) for 40–45 minutes, or until the lasagna is bubbling and golden on top.
Remove from the oven and let the lasagna rest for 10 minutes before slicing and serving.