Antes de buscar una solucion como lo que pides, es mejor hacer lo que te indica @Leonardo, pon a tus tablas en segunda forma normal eliminando las dependencias parciales o puedes dar una mejor estructura a tu tabla, por ejemplo crear una columna que almacene el id del menu padre, si es 0 entonces es un menu padre.
la estructura podría ser:
+------------+------------+------+-----+---------+----------------+
| Field      | Type       | Null | Key | Default | Extra          |
+------------+------------+------+-----+---------+----------------+
| id         | int(11)    | NO   | PRI | NULL    | auto_increment |
| parent_id  | int(11)    | NO   |     | 0       |                |
| menu_order | int(11)    | NO   |     | NULL    |                |
| permission | tinyint(2) | NO   |     | NULL    |                |
+------------+------------+------+-----+---------+----------------+
+----+-----------+------------+------------+
| id | parent_id | menu_order | permission |
+----+-----------+------------+------------+
|  1 |         0 |          1 |          2 |
|  2 |         1 |          2 |          1 |
|  4 |         1 |          3 |          3 |
|  5 |         0 |          1 |          4 |
|  6 |         5 |          2 |          5 |
|  7 |         5 |          3 |          3 |
|  8 |         0 |          1 |          5 |
|  9 |         8 |          2 |          5 |
+----+-----------+------------+------------+
de esta forma podrias hacer menus multi nivel.
para recuperar los datos, dependiendo los niveles del menu, podrias usar recursividad. en php seria algo asi:
<?php
$result = $mysqli->query(
    'SELECT *
     FROM menus
     ORDER BY menu_order ASC');
$menus = array(
    'parents' => array()
);
while($row = $result->fetch_assoc())
{
    if($row['parent_id'] == 0)
    {
        $parent_pos = count($menus['parents']) + 1;
        $menus['parents'][$row['id']] = array(
            'position' => $parent_pos,
            'parent' => $row,
            'childrens' => array()
        );
        continue;
    }
    $actual_childrens = $menus['parents'][$row['parent_id']]['childrens'];
    $row += array('position' => count($actual_childrens) + 1);
    $menus['parents'][$row['parent_id']]['childrens'][] = $row;
}
foreach($menus['parents'] as $key => $parent)
{
    echo '<div class="menu">' . sprintf('<strong>menu #%d</strong><ul>', $parent['position']);
    foreach ($parent['childrens'] as $child) {
        echo sprintf('<li>sub menu #%d.%d</li>', $parent['position'], $child['position']);
    }
    echo '</ul></div>';
}
menu #1
- sub menu #1.1
 
- sub menu #1.2
 
menu #2
- sub menu #2.1
 
- sub menu #2.2
 
menu #3
saludos!