1- creare ke opportune relazioni tra le tabelle
1 a molti, molti a molti, o 1-1 dipende da te e da quanto deve essere flessibile il sistema.

2- impostare il codice in modo che questi dati vengono gestiti correttamente(crea le opportune funzioni di recupero dati.

3- lo faicon onchange sulla select.
Oppure direttamente da onclick sull'elemento

4- non e' cosi' immediato da fare e raramente posto codice ma ti lascio degli spunti da cui partire

A) crea tabella di relazione cosi' puoi gestire le relazioni tra gli elementi come ti pare

table tipo1_tipo2
id_1
id_2
tiporelazione

primary key(id_1,id_2,tipo_relazione)

B) Crea le funzioni di recupero dati
function loadTipo1($opts)
function loadTipo2($opts)

C) imposta la pagina html con il primo selettore
C.1) dati dinamici :
hai 2 possibili strade ajax o refresh pagina con parametro get.
Ad ora mi sa che ti conviene la seconda soluzione, per cui a selezione dell'elemento ricarichi la pagina passano un parametro ?sel1=[ID TIPO 1]
C.2) La pagina esegue un controllo
if( isset($_GET) && is_set($_GET["sql1"]) && abs($_GET["sel1"]) )
{
// carica i dati relazionati a tipo1
$dati = loadTipo2( array( "id"=>$_GET["sel1"] , "order" => "name" , "ordDir" => "asc" ...... ) ) ;
}

C.3) popola il secondo selettore