Милан начал выступать за основной состав «Войводины» в сезоне 2000/01, где через пять лет получил капитанскую повязку. Сезон 2006/07 он провёл в турецком «Трабзонспоре».
В июле 2007 года, Степанов перешёл в гранд португальского футбола — «Порту». Сумма трансфера составила 3,5 миллиона евро. 28 ноября, во встрече с «Ливерпулем» в Лиге чемпионов, «Порту» потерпел поражение со счётом 1:4. Встреча была проиграна во многом из-за ошибок Степанова. После этого события Милан уступил место в основном составе ветерану команды Педру Эмануэлю. Ситуация обострилась на следующий сезон, когда на позицию центрального защитника был куплен Роланду.
25 июля 2009 года Милан отправился в аренду в клуб «Малага» из Испании. Также «Малага» получила приоритетное право на выкуп футболиста. В первой половине сезона он провёл всего 4 встречи, после чего 3 месяца провёл на скамейке запасных. Он вновь вышел на поле лишь 27 февраля во встрече против «Депортиво». Всего в чемпионате Испании Степанов сыграл 12 матчей.
Летом 2010 года Степанов вернулся в Турцию, подписав трёхлетний контракт с «Бурсаспором».
Милан выступал за сборную Сербии и Черногории на Олимпийских играх 2004 года. Команда заняла 4 место в группе C, вследствие чего и покинула турнир.
Дебют в главной команде Сербии пришёлся на товарищеский матч против сборной Чехии, в котором он был удалён. Встреча состоялась 16 августа 2006 года. Также он провёл несколько встреч в отборочном турнире чемпионата Европы 2008 года.