MySQL a une syntaxe non documentée pour trier les valeurs nulles en dernier. Placez un signe moins (-) avant le nom de la colonne et changez l'ASC en DESC :
SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC, id DESC
C'est essentiellement l'inverse de position DESC
placer les valeurs NULL en dernier mais sinon identiques à position ASC
.
Une bonne référence est ici http://troels.arvin.dk/db/rdbms# select-order_by