This is possible.
I would ask though: are you sure this is the best solution for your use case? The reason I ask is that if a node gets deleted, its original ID may get reused again for a different node. This can cause unexpected results depending on how your application/queries are going to utilize the ID.
The way to map an internal id to a property for all nodes is the following:
match (n) set n.id = id(n)
An index will make your searches faster when you search on the ID property - but is it a good idea? It's possible that it is a good idea but it depends on how important speed is to you, how large your database is, how frequently nodes will be created & deleted (the more frequently this occurs, the more storage/overhead your index is going to require), and how much storage space you have available on your database.
Indexes in Neo4j are mapped to a label - they can be single property indexes or composite (multiple property) indexes. Let's say you want to create an index for the ID property for those nodes with the label of :Person - you can achieve this with the following:
CREATE INDEX ON :Person(id)
If you find that the index was not a good idea, you could always just drop the index - see the following:
DROP INDEX ON :Person(id)
If you'd like, you can read more about indexes in Neo4j's official developer manual.