Risolto così:

SELECT * FROM (
SELECT
IdAnagrafica,
CONCAT(Cognome, ' ', Nome) as generalita,
YEAR(DatadiNascita) as datanascita
FROM anagrafica
WHERE
CONCAT(Cognome, Nome, YEAR(DatadiNascita), IdAnagrafica) < CONCAT(\"".$cognome."\", \"".$nome."\", ".$anno_nascita.", ".$id.")
ORDER BY CONCAT(Cognome, Nome, DatadiNascita) DESC LIMIT 1) as precedente

UNION

SELECT * FROM (
SELECT IdAnagrafica,
CONCAT(Cognome, ' ', Nome) as generalita,
YEAR(DatadiNascita) as datanascita
FROM anagrafica
WHERE CONCAT(Cognome, Nome, YEAR(DatadiNascita), IdAnagrafica) > CONCAT(\"".$cognome."\", \"".$nome."\", ".$anno_nascita.", ".$id.")
ORDER BY CONCAT(Cognome, Nome, DatadiNascita) ASC LIMIT 1) as successivo
ORDER BY generalita ASC, datanascita ASC
e poi...

Codice PHP:
<table class="piccolo" width="100%" border="0" cellspacing="1" cellpadding="0">  
 <?php do { ?>     
<tr onclick="location.href = 'home.php?id=<?php echo $barranav['IdAnagrafica']; ?>'" class="evidenzia" align="left">       
<td>
<?php echo substr(stripslashes($barranav['generalita']), 020); ?>
</td>       
<td>
<?php echo stripslashes($barranav['datanascita']); ?>
</td>     
</tr>   
<?php } while ($barranav mysql_fetch_assoc($set_barranav)); ?>   
</table>