Ton histoire ne fait pas du tout pitié, c'est tout à fait normal de rencontrer ce genre de situations à ton âge, et de ne pas savoir forcément comment les gérer (ça s'apprend avec le temps).
Je pense que dans un cas comme celui-ci, il faut en parler avec la personne. Ce n'est pas ton pote qui est toxique, mais son comportement, et vu qu'il est adolescent comme toi, c'est fort probable qu'on ne lui ait encore jamais dit clairement que ses propos pouvaient faire souffrir son entourage. Il faut que quelqu'un lui dise à un moment ou un autre, et autant que ça soit quelqu'un qui tient à lui.
Je pense qu'il vaut mieux dire les choses clairement : "je n'aime pas quand tu me rabaisses", "je me sens mal quand tu me fais la gueule pour rien".
Bien sûr, il faut accepter que ton pote a des défauts, et le but n'est pas de tous les corriger. Il faut l'accepter comme il est, tout en rejetant certains comportements.
Le plus difficile, ça sera de lui faire comprendre tout ça tout en restant bienveillant, et de mettre les formes pour ne pas le braquer.
De plus, je pense aussi qu'il faut éviter de lui dire que tu hésites à mettre fin à votre amitié (il le sait déjà, vu que tu as déjà pris tes distances avec lui par le passé). Ce serait mettre un ultimatum sur votre relation, et je ne suis pas sûr que ça soit très sain.
Après, ça reste un ado, donc il y a toujours un risque qu'il se vexe et qu'il réplique par des critiques à ton encontre. Il faut te préparer à ça aussi, et rester calme si ça arrive. Si sa réaction est mauvaise, tu auras beaucoup moins de regret à couper les points, mais pour l'instant, il vaut mieux essayer de réparer ce qui peut encore l'être.
Et enfin, si ça te rassure, la plupart des gens se remettent en question avec le temps, et pour ceux qui ne le font pas, on apprend à les repérer et les éviter avant qu'ils nous fassent du mal.