I approach index creation as something that requires a trial and error approach.
However there are basic rules to follow:
1 - Indexes do not add performance to small tables.
2 - Many indexes can decrease performance on INSERT, UPDATE and DELETE
3 - The indexes should contain only a few columns.
4 - The columns used in the WHERE and BETWEEN clauses or that participate in a JOIN should be placed first. The remaining columns should be organized based on their level of distinction.
Given this in mind the answer to your question is:
CREATE INDEX TESTE2 (Estado ASC, Cidade ASC, DataCadastro ASC, DataNascimento DESC)
However, if the ORDER BY DataCadastro, DateChannel DESC clause is used many times and prevails in the primary key , you should consider creating a CLUSTERED INDEX in these columns.
In this case two Indexes would be created:
CREATE INDEX index1 (Estado ASC, Cidade ASC)
CREATE CLUSTERED INDEX index2 (DataCadastro ASC, DataNascimento DESC)
The data would be written sorted by DataCadastro ASC, DataNascimento DESC
instead of by primary key .
UPDATE
The exchange of comments between me and jean, led me to research further on the subject.
Using a CLUSTERED INDEX in a field that is not "always growing" may result in higher INSERT times.
However, sorts are always longer than an INSERT .
The cost / benefit ratio should be evaluated.
In the case of the question, we can ensure that the index is "always growing" if DataCadastro
is of type DateTime .
If you want to become an expert in creating indexes follow this link .
See also this explanation of how CLUSTERED INDEX works