Código MySQL:
Ver original DP.nombre,
DP.apellidos,
DP.sexo,
DP.provincia,
DP.fecha_nacimiento,
DP.nivel,
DP.disponibilidad_horaria,
DP.viajar,
DP.vehiculo,
DP.permiso_conducir
datos_candidatos DC
INNER JOIN datos_personales DP
ON DC.idcandidato
= DP.idcandidato
INNER JOIN datos_estudios DE
ON DC.idcandidato
= DE.idcandidato
$where
A mi entender, lo que te plantea Huesos52 es lo único que puede mejorar la performance de esta consulta, porque la selección está optimizada al máximo posible, ya que las relaciones están creadas sobre la PK y en ese sentido no hay mejor selectibilidad.
Si deberías crear índices INDEX sobre los campos datos_estudio.idcandidato y datos_otros.idcandidato, ya que son los usados para el INNER JOIN y la relación debe ser 1:N en esos casos.
A esos índices, habría que agregarles los que puedas definir para los parámetros del WHERE, como dice Huesos52.