You've got two questions in here:
1. Does the nonclustered index have a sorted B-tree? Yes, because you have to get to the right page of the index to find the data you're looking for.
2. Why do you want a nonclustered index when you also have a clustered index? Think of the white pages of the phone book as your clustered index. If you wanted to find all of the people in your city with a first name of "Brent", then the clustered index isn't going to do you much good - the clustered index is based on last name, first name, middle initial. Wouldn't it be helpful to have a separate phone book sorted by first name?
Just like in real life, the answer to that might be yes or no - but it depends on how often you search for people by first name, and how often people move in/out of your city, or how often people change names.
You're going to have to physically move the data - there is no getting around that. But I don't know who came up with the idea that doing so requires creating a clustered index - this just exchanges certain steps for others, and isn't going to require any different amounts of temporary space to accomplish than the method I outline below.
Why not create a second, empty heap on the new filegroup:
CREATE TABLE dbo.whatever_copy
(
... cols ...
)
ON [second filegroup];
Then script the indexes, constraints etc. from the original table, copy the data over, remove any constraints that need to be removed (e.g. foreign keys pointing to the original table), then drop the original table, and rename the new one. Finally, add the indexes and constraints to the new table.
-- script out indexes, constraints etc.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
INSERT dbo.whatever_copy(cols) WITH (TABLOCK)
SELECT cols FROM dbo.whatever;
-- remove constraints etc.
DROP TABLE dbo.whatever;
EXEC sp_rename N'dbo.whatever_copy', N'whatever', N'OBJECT';
-- add constraints etc.
COMMIT TRANSACTION;
Best Answer
As far as I know, you have two options:
I'd prefer the first option.