Devi cambiare alcuni dei tuoi AND in OR e poi tra parentesi gli OR.
In questo momento hai bisogno di uno dei $vehicle MATCH e anche di entrambi delle corrispondenze di $keyword. Invece, penso che tu voglia richiedere uno qualsiasi dei $vehicle o $corrispondenze di parole chiave.
Inoltre, penso che tu possa combinare le corrispondenze di $keyword in un'unica chiamata MATCH, vero? E penso che il controllo LIKE rispetto a T.truck_number sia ridondante dato il MATCH che include quella colonna. In tal caso potresti scrivere quella sezione dell'SQL come:
AND (MATCH( T.truck_number, T.make, T.model, T.engine, T.vin_number,
T.transmission_number, T.comments) AGAINST( '$vehicle' )
OR MATCH( P.part_num, P.part_desc, P.part_ref,M.comments, M.work_done)
AGAINST( '$keywords' ))
E includo il commento obbligatorio sulla protezione contro l'iniezione di SQL sfuggendo all'SQL dinamico che crei.