Como dices, with($msg) solo vale para la accion del momento, al hacer redirect $msg estará vacío.
Lo mejor es usar:
Código PHP:
// RegistrarController.php
Session::flash('mg', 'Todo correcto');
// login.blade.php
@if ($msg == Session::get('msg'))
<div class="aviso">{{ $msg }}</div>
@endif
Una vez usado Session::get('msg')) la variable de sesión desaparece porque se guardó con flash.
http://laravel.com/docs/session#flash-data