Order of your data returned is not guaranteed when you do not specify an order by.
Consider this example:
CREATE TABLE dbo.SmallTable([name] varchar(25) PRIMARY KEY NOT NULL,
Number int);
INSERT INTO dbo.SmallTable ([name],[Number]) VALUES ('compi',15 ), ('jack',5 ), ('malik',20 ), ('nana',10 );
If you were to just select without an order by:
SELECT [name],[Number]
FROM dbo.SmallTable;
The order this time is the same as your first example:
name Number
compi 15
jack 5
malik 20
nana 10
But this is not guaranteed.
If you want the ordering to be guaranteed then you need to add an order by:
SELECT [name],[Number]
FROM dbo.SmallTable
ORDER BY [name] ASC;
What you are seeing when creating the nonclustered index on number is the query using this new NC index.
For example:
CREATE INDEX IX_Number
on dbo.SmallTable(Number);
Running the query again:
SELECT [name],[Number]
FROM dbo.SmallTable;
I get the same result as you:
name Number
jack 5
nana 10
compi 15
malik 20
Because now sql server decides to use the IX_Number index to return the results:

Which is ordered by number asc.
To guarantee the ordering the query needs to be changed to:
SELECT [name],[Number]
FROM dbo.SmallTable;
ORDER BY [name] asc;
The ordering could even be different than the index order from the index that was used. This means that even if now the ordering is on the number or name column, it could be on any one of these columns or even none.
Always use an order by if the ordering is important.
More info on the subject can be found here, here, here and here