Let's start with your grammar:
S → (S)S | ε
To build an SLR(1) parser for this grammar, we need to augment it with a new start rule:
Start → S
S → (S)S | ε
Notice that FOLLOW(S) contains ) and $ and no other symbols.
We can now start building the SLR(1) automaton by building the LR(0) automaton and augmenting each production with its FOLLOW set:
(0)
Start -> .S [$]
S -> .(S)S [$)]
S -> . [$)]
(1)
Start -> S. [$]
(2)
S -> (.S)S [$)]
S -> .(S)S [$)]
S -> . [$)]
(3)
S -> (S.)S [$)]
(4)
S -> (S).S [$)]
S -> .(S)S [$)]
S -> . [$)]
(5)
S -> (S)S. [$)]
You've claimed that states 0, 2, and 4 have shift/reduce conflicts, but I don't actually think that's the case here. In state (0), we have the completed item S → ., but the lookaheads are $ and ). This means that we only reduce on $ and ). On the other hand, the only shift action here occurs on a ( symbol.
If we didn't have lookaheads here, we'd have a shift/reduce conflict, but because of the lookaheads we know to shift if we see a ( and to reduce if we see ) or $. If you check the other states you've flagged, you'll see that the same logic applies.
As a result, this grammar is indeed SLR(1).