Я лично выбираю названия, которые представляют, как будут использоваться автомобили.
В вашем примере я бы, вероятно, просто набрал void Race(IList<Car> cars)
, поскольку каждая машина эквивалентна.
Если всегда есть два эквивалентных параметра, использование firstCar и secondCar представляется разумным.
Однако, если бы вы делали что-то вроде перемещения деталей из одного автомобиля в другой, я бы очень описательно, например:
static void StealParts(Car targetCar, Car sourceCar);
Чем более наглядно вы будете именовать аргументы, тем проще будет использовать API.