To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of rings as \(R\) and the number of necklaces as \(N\). The objective is to maximize profit, with each ring contributing $50 and each necklace contributing $75 to the total profit.

The constraints are:
1. **Gold Availability**: The total gold used for rings and necklaces cannot exceed 1000 units. Since each ring needs 2 units of gold and each necklace needs 3 units of gold, we have \(2R + 3N \leq 1000\).
2. **Popularity Constraint**: At least three times as many rings are needed than necklaces, so \(R \geq 3N\).
3. **Minimum Necklaces**: There needs to be at least 50 necklaces made, so \(N \geq 50\).

The objective function to maximize is \(50R + 75N\), representing the total profit.

Given these constraints and the objective function, we can formulate this problem as a linear programming problem and solve it using Gurobi in Python. Here's how you could implement it:

```python
from gurobipy import *

# Create a new model
m = Model("JewelryProfit")

# Define variables
R = m.addVar(lb=0, vtype=GRB.INTEGER, name="Rings")
N = m.addVar(lb=0, vtype=GRB.INTEGER, name="Necklaces")

# Objective function: Maximize profit
m.setObjective(50*R + 75*N, GRB.MAXIMIZE)

# Constraints
m.addConstr(2*R + 3*N <= 1000, "GoldAvailability")
m.addConstr(R >= 3*N, "PopularityConstraint")
m.addConstr(N >= 50, "MinimumNecklaces")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Rings: {R.x}")
    print(f"Necklaces: {N.x}")
    print(f"Total Profit: ${50*R.x + 75*N.x}")
else:
    print("No optimal solution found")
```