Lo que sí sería fácil es una solución mediante programación. Haces las dos consultas por separado y luego muestras los datos unidos siguiendo el orden en que fueron seleccionados. Eso sería lo mejor y más recomendable.
No sé si habría alguna solución con Store Procedures, pero yo no los manejo.
Si puedo ofrecerte mi experimento: a mí sólo se me ocurre que crees dos tablas temporales con los datos de la consulta limitada a 5 y ordenados al azar, pero con un primary key auto_increment que nos permita luego establecer la relación entre esas dos tablas temporales. Luego presentamos unidos mediante inner join por ese campo que he llamado indice.
Código sql:
Ver originalDROP TABLE IF EXISTS tmp;
CREATE TABLE tmp (indice INT (11) PRIMARY KEY AUTO_INCREMENT) engine = memory SELECT nombre FROM a ORDER BY rand() LIMIT 5;
DROP TABLE IF EXISTS tmp2;
CREATE TABLE tmp2 (indice INT (11) PRIMARY KEY AUTO_INCREMENT) engine = memory SELECT apellido FROM b ORDER BY rand() LIMIT 5;
SELECT tmp.nombre, tmp2.apellido FROM tmp INNER JOIN tmp2 ON tmp.indice = tmp2.indice;
Pero el mismo resultado lo conseguirás con programación muy fácilmente.