The link below made me realise that we could improve on options of "create new table" / "select into" / "alter table". All of which involve writing a new table or columns to disk, and involve logging.
Use a table variable to hold the contents of the table to be altered, truncate the original table, then fill it from the table variable. So minimal logging and minimal I/O.
http://www.codeproject.com/KB/database/SQLTableVarTricks.aspx