Searching large dataset, best way to speed this up
Yes, an index on quote.vehicle_id would help this greatly.
As a general rule† it is a good idea to have an index on columns that are foreign keys, and you should define it as a foreign key with:
FOREIGN KEY (vehicle_id) REFERENCES vehicles(id)

This way the database will help verify your data and prevent a family of potential bugs happening.
Also you will find mySQL's query planner/engine produces a more efficient plan if you use WHERE EXISTS. Your sub-select with GROUP BY will force it to run that part once per outer row when more efficient strategies could be available. Also EXISTS can exit early, once the first matching row is found, but a subquery with an aggregate as above will stop that happening so more rows may be read and considered which is not needed:
SELECT *
FROM vehicles v
WHERE v.group = 0
AND EXISTS (
    SELECT id FROM quotes quote
    WHERE quote.vehicle_id = v.id
    AND quote.term = 60 
    AND quote.annual_mileage = 8000
    AND quote.deposit = 250
    AND quote.credit_rating = &quot;Excellent&quot;
    ) 

You still want the index on quote.vehicle_id for this to avoid full table scanning.
† There are valid exceptions to this rule, which is part of why most database engines don't create such an index automatically, but they are fairly rare.