Gentilissimo!!
Ho provato subito il tuo script e funziona, anche se con la mia tabella non ottengo proprio il risultato sperato

ma ti ringrazio comunque perché i tuoi consigli mi sono serviti a risparmiare qualche riga di codice, ecco lo script finale

Codice PHP:
<select name="provincia">
    <option value="0" disabled="disabled">Seleziona una provincia</option>
    <?php
        
include "connessione.php";
        
$sql="SELECT *
        FROM `regioni_province`
        ORDER BY `denominazione_regione` ASC;"
;
        
$risultato = @mysql_query($sql,$connessione);
        if (!
$risultato) {
            die (
"errore: lettura del db non riuscita.");
        }

        
$rows mysql_num_rows($risultato);
        
$rows_counter 0;
        
$regione_precedente "ABRUZZO";
    
?>
    <optgroup label="<?php echo $regione_precedente?>">    
    <?php    
        
while ($rows_counter $rows)
        {
            
$row mysql_fetch_row($risultato);
            
$rows_counter++;
            
            
$id $row[0];
            
$regione $row[1];
            
$provincia $row[2];
            
$sigla_auto $row[3];

            if (
$regione != $regione_precedente)
            {
    
?>
    </optgroup>
    <optgroup label="<?php echo $regione?>">
        <option value="<?php echo $sigla_auto?>"><?php echo $provincia." (".$sigla_auto.")"?></option>
    <?php
                $regione_precedente 
$regione;    
            }
            else
            {
    
?>
        <option value="<?php echo $sigla_auto?>"><?php echo $provincia." (".$sigla_auto.")"?></option>
    <?php
            
}
        }
        
mysql_close($connessione);
    
?>
</select>
adesso è senz'altro più leggibile di prima
ma tu come hai strutturato la tabella? La mia è strutturata così
codice:
CREATE TABLE `regioni_province` (
  `id_provincia` tinyint(4) NOT NULL auto_increment,
  `denominazione_regione` varchar(30) NOT NULL,
  `denominazione_provincia` varchar(30) NOT NULL,
  `sigla_automobilistica` varchar(2) NOT NULL,
  PRIMARY KEY  (`id_provincia`)
);
Mi sai dire perché non va con il tuo esempio? Sennò non importa, avrei risolto, mi bastava ottimizzare un po' il codice