Как отсортировать массив?
SELECT name, `text`
FROM product
JOIN product_attribute USING (product_id)
JOIN attribute_description USING (attribute_id)
-- JOIN attribute USING (attribute_id)   -- таблица в запросе не нужна
GROUP BY 1, 2
HAVING COUNT(*) > 1;
fiddle

Если нужна именно сортировка как в эталоне - ну добавить ORDER BY MAX(attribute_id)

Таблица attribute потребуется лишь в случае, если данные из неё нужны (например, в запрос добавится отбор по значению attribute_group_id).

Если  надо сравнивать атрибуты у более чем 2 товаров, то соотв. образом откорректировать условие пост-отбора. Например, для 3 товаров и атрибутов, имеющихся у всех трёх, это будет HAVING COUNT(*) = 3
Извращение, конечно, но я бы сделал так:
$ar1 = [
	['a' => 1, 'b' => 2],
	['a' => 2, 'b' => 11],
	['a' => 3, 'b' => 12],
];
$ar2 = [
	['a' => 1, 'b' => 2],
	['a' => 2, 'b' => 11],
	['a' => 3, 'b' => 13],
];

$hashedArray1 = [];
foreach($ar1 as $ar) {
	$hashedArray1[json_encode($ar)] = $ar;
}
$hashedArray2 = [];
foreach($ar2 as $ar) {
	$hashedArray2[json_encode($ar)] = $ar;
}
var_dump(array_intersect_key($hashedArray1, $hashedArray2));