How should I handle different surfaces in top-down 2D?

I’m making a top-down 2D car game. I want to have different surfaces for the car to drive on (road, grass, etc.). I’m using standard 2D physics with gravity turned off.

How can I go about making each surface affect the car differently? e.g. grass slowing down the car, oil/water making the car slide.

I have thought of using collision detecting (if the car collides with water I can adjust the angular drag for example). Is this a sound way to do it? It seems a bit manual. Am I missing a simple way to let physics/materials handle this?

Consider using physics materials.