Si modificas tu código así creo que podrías unir ambos arrays:
Código PHP:
$sql1 = "SELECT palabras, COUNT(*) AS num FROM tags GROUP BY palabras";
$resultado1 = mysql_query($query1);
$i = 0;
while($datos1=mysql_fetch_assoc($resultado1)) {
$sql2 = "SELECT COUNT(*) as num2 FROM files WHERE titulo LIKE '%".$datos1[palabras]."%' OR descripcion LIKE '%".$datos1[palabras]."%'";
$resultado2 = mysql_query($query2);
$datos2=mysql_fetch_assoc($resultado2);
$datos[$i][palabras] = $datos1[palabras];
$datos[$i][num] = $datos1[num];
$datos[$i][num2] = $datos2[num2];
$i++
}
La idea es obtener una matriz con toda la información a la que posteriormente aplicar un algoritmo de ordenación. Hay varios algoritmos en pseudocódigo que puedes transformar fácilmente a PHP para que ordene una matriz.
Aquí te dejo un enlace con los más famosos:
Lista de algoritmos de ordenamiento
Si no quieres uno muy complicado de implementar te recomiendo el de la burbuja, aunque no es el más eficiente.
Otro muy famoso (y más rápido) es el
QuickSort pero quizás te resulte más difícil de implementar.
Desconozco si PHP tiene alguna función ya implementada que pueda hacer este tipo de ordenación.