You need to delete in batches. I've done that dozens of times without issues on tables with several millions records. But regardless, you table will be fragmented once you're done, no way to avoid that.
Here's an example:
--DELETING LARGE AMOUNTS OF DATA
DECLARE @Done BIT
SET @Done = 0
WHILE @Done = 0
BEGIN
DELETE TOP (20000) -- reduce if log still growing
FROM SomeTable WHERE SomeColumn = SomeValue
IF @@ROWCOUNT = 0
SET @Done = 1
CHECKPOINT -- marks log space reusable in simple recovery
END
Also, keep an eye on your Tlog, it may growth while you do this.