Existerait il une meilleure solution ?
Ça dépend des cas. Il existe toujours une "meilleure" solution mais elle est différente selon les cas et son utilité est très variable. Certaines personnes abhorrent NULL pour des raisons idéologique, mais pour le commun des mortels il y a des cas où ce n'est pas plus mal.
Au niveau des alternative, le plus courant est de supprimer la colonne de la table et de créer une nouvelle table contenant la valeur de la colonne pour les enregistrements qui possèdent une valeur. Dans ton cas, tu aurais une table "quantite" dont les colonnes seraient "produit_id, quantite" et qui ne contiendraient que les numéros et quantités des produits quantifiables. Mais bon, ça complique un petit peu les choses au moment de l'insertion ou la suppression des enregistrements, donc même si ce n'est pas une pratique que je recommande je comprends qu'on utilise NULL.
Même si je n'ai pas d'exemples qui me vient immédiatement à l'esprit, il existe d'autres cas où cesser d'utiliser un champ NULL (et créer une table supplémentaire comme dans l'exemple précité) règle plusieurs problèmes à la fois et rendent les requêtes plus performantes. Ça dépend vraiment des circonstances.
Alors que faut il réorganiser ??
Pour l'instant je dirais non, mais si tu te reposes la question dans quelques jours alors la réponse était peut-être "oui"
J'ai découvert la fonction IFNULL de mysql, qui a permit de resoudre mon problème.
Attention à ne pas devenir dépendant des fonctions de MySQL. La requête que j'ai posté plus haut fonctionne sous tous les serveurs SQL, que ce soit n'importe quelle version de MySQL ou PostgreSQL, Oracle, DB2, etc...
Celle ci me permet d'affecter une valeur positive tres élevée de mon choix dans le cas d'un "NULL" [...]
En général ce genre de solution réserve des surprises à long terme. Si tu veux que les NULL soient en dernier, fais en sorte que les NULL soient en dernier. Ne fais pas en sorte que NULL soit égal à 999 parce qu'un jour tu auras peut-être un lot de 1000 petites cuillères dans ta base de données qui va tout envoyer en l'air. Dans le même genre, il se peut que la valeur "arbitrairement haute" que tu as choisi pour représenter NULL devienne tronquée pour des raisons internes qu'il me serait trop long de détailler. L'important, ce qui est à garder à l'esprit, c'est d'aller directement vers ce que l'on recherche. Dès qu'on commence à emprunter des chemins détournés et à deviser des alternatives, on s'expose à des circonstances imprévues et c'est également signe que quelque chose ne va pas.
Mon conseil, essaie la requête que j'ai posté plus haut, et si ça marche utilise ça plutôt qu'une solution qui risque de te péter à la gueule un de ces jours. Et si ça ne marche pas, met à jour le topic, parce qu'elle est sensée marcher.