Well, I've finally found myself a way to speed things up using a combination of GROUP_CONCAT, GROUP BY and HAVING to replace the nested SELECT which was being executed thousands of times (once per record).
Now the query is still not speedy (it takes a good 10 seconds to run), but it's not so incredibly slow (before, it took almost 4 minutes), so it's still a pretty BIG improvement!
SELECT SQL_CALC_FOUND_ROWS vino.ID, detalle, nombre, do, vino.ID_do, anada, tamano_texto, vino.ID_tamano, precio, imagen_principal, vino.ID_imagen_principal, imagen_principal_tn, imagen_detalle, vino.ID_imagen_detalle, imagen_detalle_tn, vino.ID_tipo, tipo_texto, vino.ID_pais, pais_texto, precio_copa, precio_tienda,
GROUP_CONCAT(componente_texto) AS csv_componente_texto
FROM vino
INNER JOIN almacen ON almacen.ID_categoria = 1 AND ID_articulo = vino.ID AND unidades > 0
LEFT OUTER JOIN vino_componente ON vino_componente.ID_vino = vino.ID
LEFT OUTER JOIN componente_texto ON componente_texto.ID_componente = vino_componente.ID_componente AND componente_texto.ID_idioma = 1
LEFT OUTER JOIN do ON vino.ID_do = do.ID
LEFT OUTER JOIN tamano ON vino.ID_tamano = tamano.ID
LEFT OUTER JOIN tamano_texto ON tamano_texto.ID_tamano = tamano.ID AND tamano_texto.ID_idioma = 1
LEFT OUTER JOIN imagen_principal ON vino.ID_imagen_principal = imagen_principal.ID
LEFT OUTER JOIN imagen_detalle ON vino.ID_imagen_detalle = imagen_detalle.ID
LEFT OUTER JOIN tipo ON vino.ID_tipo = tipo.ID
LEFT OUTER JOIN tipo_texto ON tipo_texto.ID_tipo = tipo.ID AND tipo_texto.ID_idioma = 1
LEFT OUTER JOIN pais ON vino.ID_pais = pais.ID
LEFT OUTER JOIN pais_texto ON pais_texto.ID_pais = pais.ID AND pais_texto.ID_idioma = 1
WHERE activo = 1
GROUP BY vino.ID
HAVING nombre LIKE '%blanco%'
OR do LIKE '%blanco%'
OR csv_componente_texto LIKE '%blanco%'
OR anada LIKE '%blanco%'
OR tamano_texto LIKE '%blanco%'
ORDER BY tipo.orden_papel, vino.ID_pais, do, precio
LIMIT 30;
From the answers provided by other people, none really fixed the problem like my own answer, so I won't mark any of them as correct, though @skstar's suggestion might be helpful to further enhance performance, so I've voted it up. Thanks for your help.