I want to address some real examples of usage here:
準備 in actual use has more of a meaning of getting ready for something, and is used in ways that the others are not. For example, you would say 運動会の準備をしています or ランチの準備をしてる, but not 用意 in these cases, at least not with the same meaning.
用意 means something a lot closer to preparing something, and I see it used very often with food or other situations of hospitality, as in 部屋にベッドは用意しています (the bed is ready for you in your room) or ケーキを用意する, to prepare a cake. In this case you wouldn't really say ケーキを準備する, for example. Its English equivalent would be something like "ready the cakes!" You COULD say it but it lacks the idea of preparedness for special use and emphasizes the general availability for use, if that makes sense.
覚悟 has been addressed well already, and it just means to be personally ready for something.
支度 isn't really used much as far as I can tell, but it has a meaning of "getting ready." For example, there is the word 支度部屋 (dressing room) or 身支度 (getting dressed). You can say 学校の支度をする or 夕食の支度をする or others of that vein. It feels closest in meaning to 準備 but with a little bit of 用意 thrown in.
The difference isn't really that profound in meaning between them, however, as in the 大辞林 dictionary they are basically defined in terms of each other. See 支度, 準備, 用意
It literally defines 支度 as 準備すること。用意すること, and it has other nuances attached that correspond to my explanation above.
準備 is similar, defined as 用意すること。支度すること。 but without the extra nuances.
用意 also lists both 準備 and したく as definitions but emphasizes the beforehand-ness of preparation for a specific act.