You can restrict project visibility to particular groups of users by using project permissions.
For example, if customers from Company X were put into the group "Cust-X" and given "Browse" permission for project Y, they will only be able to see Project Y (assuming you did not grant them the "Browse" permission for any other projects).
You should of course also give your developers permission to browse and operate on the project.
If you would like to restrict users to issues which they have created, set the "Browse Project" permission to be "Reporter." This way the user will have access to only the issues which they have created across all projects, but they will not be able to see any other issues.
You can also set security on an issue-by-issue basis. For more information on JIRA's Issue Level Security, please consult the documentation.