Si he entendido correctamente, esto debería hacer lo que necesita:
$result = mysql_query("SELECT (specName, (IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))) FROM specialities s;");
while (list($spec, $checked) = mysql_fetch_array($result)) {
// Do your outputting here.
}
Editar
De acuerdo con su solicitud, seguiré adelante y explicaré la consulta. La parte que probablemente te confunda es esta subconsulta:
(IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))
El IF EXISTS
le dice a MySQL que devuelva VERDADERO o FALSO si la parte que le sigue inmediatamente 'existe' (contiene un resultado). El SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1
simplemente le dice a MySQL que busque una fila en user_specialty
donde s.id = us.sid
(el ID de especialidad coincide) y us.uid = '$id'
(el ID es el del usuario).