Margin-left je třeba kvůli různé výšce levé části. Zkus si ji změnit na něco kolem 25px. Pokud by #div1 byl zaručeně alespoň stejně velký jako #div2, nebyl by potřeba.
Overflow zase zaručuje ukončení obtékání, zachrání situaci, když by levý sloupec byl delší než pravý. Pokud by byl #div2 delší nebo roven #div1, nebyl by potřeba.
Tvůj problém je v tom, že jakmile něčemu dáš float, ztratí to možnost automatické velikosti.