Bring a large pot of salted water to a boil. Cook the rigatoni according to the package directions until al dente. Before draining, reserve 2 cups of the pasta cooking water, then drain the pasta and set aside.
Meanwhile, heat the olive oil and butter in a large, deep skillet or Dutch oven over medium-high heat.
Add the onion, carrots, celery, and garlic. Sauté for 5–7 minutes, stirring occasionally, until the vegetables are softened and the onion is translucent.
Stir in the cauliflower florets and cook for 8–10 minutes, stirring frequently and breaking the florets into smaller pieces with a wooden spoon as they soften. Continue cooking until the cauliflower is lightly browned and resembles a hearty, meat-like texture.
Season with salt and black pepper. Add the crushed tomatoes, reserved pasta water, parsley, basil, and thyme. Stir to combine.
Reduce the heat to low, cover, and simmer for 30 minutes, stirring occasionally, until the cauliflower is tender and the sauce has thickened.
Stir in the grated Parmesan cheese until melted and incorporated.
Add the cooked rigatoni to the sauce and toss until evenly coated. If needed, add a splash of reserved pasta water to loosen the sauce.
Serve immediately, topped with additional Parmesan cheese, fresh parsley, and freshly cracked black pepper.
Cut the cauliflower into very small florets so they naturally break down into a rich, "meaty" texture as they cook.For a vegan version, replace the butter with additional olive oil and substitute the Parmesan with your favorite dairy-free alternative.Leftovers keep well in the refrigerator for up to 4 days and taste even better the next day.