Tu as raison, une si grande table n'est pas utilisable. Si vous avez besoin d'un vrai système de gestion des messages, regardez plutôt les solutions NoSQL (comme HBase, Cassandra, MongoDB, etc.), vous devrez simplement oublier tout ce que vous savez sur les bases de données relationnelles.
Avec MySQL, vous pouvez toujours faire quelque chose d'évolutif si vous divisez la table en très petits morceaux. Faites en sorte qu'une table conserve les messages d'un maximum d'utilisateurs 1k (vous devrez écrire tous les messages deux fois, sauf si les deux utilisateurs appartiennent à la même table). De plus, ne conservez pas plus de 1 000 tables dans une base de données, créez-en automatiquement une autre lorsque cette limite est atteinte. Le fait d'avoir plusieurs bases de données (même sur un serveur physique) permettra à DBA de transférer facilement chacune d'entre elles vers un nouveau serveur lorsque l'actuel devient surchargé. Pour obtenir les messages d'un certain utilisateur, votre code devra obtenir la base de données/table requise à partir d'une carte que vous aurez.